Skip to main content

Full text of "Edimicro - Guide de l'Oric"

See other formats


Philippe Bayvejiel 








= 
=, Edimicro 


RS SL a de. 
A É S , 


GUIDE DE L'ORIC 


Philippe BAY VEJIEL est le pseudonyme des quatre auteurs de l’ouvrage : Michel 
BIRADES, Dominique JOLY, Philippe LE BITOUX, Jean-Marie VALLADE. 


Cet ouvrage a été réalisé sous la direction de Benoît de MERLY. 





© F.D.S./Edimicro 1983 
Première édition 


Imprimé en France. Droits mondiaux réservés. 


« La loi du 11 mars 1957 n'autorisant. aux termes des alinéas 2 et 3 de l'article 41, d'une part, que les 
« copies ou reproductions strictement réservées à l'usage privé du copiste et non destinées à une utili- 
sation collective » et, d'autre part, que les analyses et les courtes citations dans un but d'exemple et d'il- 
lustration. « toute représentation ou reproduction intégrale, ou partielle. faite sans le consentement de 
l'auteur ou de ses ayants droit ou ayants cause, est illicite » (alinéa 1°" de l'article 40) ». 

« Cette représentation ou reproduction, par quelque procédé que ce soit, constituerait une contrefaçon 
sanctionnée par les articles 425 et suivants du Code pénal ». 


ISBN : 2-904457-02-X 


EDIMICRO 
DÉPARTEMENT ÉDITIONS DE F.D.S. SARL 


121-127, avenue d'Italie, 75013 Paris. Tél. 585.00.00 


GUIDE DE L'ORIC 


par 


Philippe BAYVEJIEL 


= = 
= Edimicro 


Préface 


Vous êtes ou vous serez bientôt, en possession d'un 
microordinateur Oric. Votre achat est justifié par des 
besoins personnels (curiosité, besoin de développer l'in- 
formatique familiale) ou professionnels (problèmes de 
paye, de comptabilité, de gestion de stocks). 


Vous désirez maintenant apprendre à vous servir de 
votre machine, c'est-à-dire découvrir et utiliser au 
mieux toutes ses possibilités, et ainsi rentabiliser 
votre nouvelle acquisition. C'est 1à le but de ce guide. 


A qui s'adresse le GUIDE DE L'ORIC ? Principalement à 
ceux qui n'ont que des connaissances très restreintes en 
informatique ou en programmation. Il s'agit donc avant 
tout d'une initiation, mais d'une initiation suffisamment 
poussée, pour vous permettre de programmer correctement. 


Toutes les notions dont vous avez besoin sont abor- 
dées progressivement. A l'aide de programmes simples et 
commentés, vous assimilerez sans peine le maniement de 
la machine et vous maîtriserez le vocabulaire de base 
pour converser avec votre Oric. Ce vocabulaire sera 
ensuite approfondi pour vous permettre de faire des gra- 
phiques, de la musique ou des mathématiques. 


Nous vous engageons, lors de votre apprentissage, à 
faire exécuter par Oric les exemples commentés, puis 
les modifier au gré de votre imagination. En effet, la 
pratique de l'ordinateur est, avant tout, expérimentale. 
Seule une utilisation effective vous permettra de pro- 
gresser rapidement et d'acquérir les quelques règles 
simples qui feront de vous un bon utilisateur. 


A l'issue de la lecture de ce livre, vous aurez 
constaté que l'ensemble des possibilités de votre Oric 
n'a pas d'autres limites que celles de votre imagina- 
tion... 


Table des matières 


Chapitre 1 : Présentation générale de l'Oric 


1.1 


1.2 


1.3 


1.4 


1.5 


1.6 


1.7 


Introduction 

Le clavier 

L'unité centrale 
La sortie vidéo 

La sortie cassette 
Les extensions 


Mise en route 


Chapitre 2 : Initiation à la programmation 


2.1 


2.2 


Introduction 
2.1.1 Stockage de l'information 
2.1.2 Notion de langage - Le Basic 


Mode direct - Mode différé 


2.2.1 Introduction 
2.2.2 Fonctionnement en mode direct 
- Les opérations élémentaires 
* addition 
* soustraction 
* multiplication 
* division 
* puissance 


- Les ordres de priorité des opérateurs 


—- Notion de variable 


Les bases de la programmation - 
Découverte du langage Basic 


2.3.1 Le premier programme 
2.3.2 L'instruction GOTO 
2.3.3 La commande LIST 


— V - 


11 


11 


13 
15 


16 


16 
18 


26 


26 


30 


2.3.4 CTRL-C, CONT 31 
2.3.5 RESET 32 
2.3.6 L'instruction INPUT 33 
2.3.7 L'instruction PRINT 34 
2.4 Commandes fondamentales 36 


2.4.1 Connaître le contenu d'un programme - 


La commande LIST 36 
2.4.2 Effacement d'un programme - 

La commande NEW 38 
2.4.3 Lancement d'un programme - 

La commande RUN 39 
2.4.4 Fin d'un programme - 

Les instructions STOP/END 40 
2.4.5 Corrections et modifications 

de programmes 40 


- insertion d'une ligne 

- suppression d'une ligne 

— modification complète d'une ligne 

- modification de quelques caractères sur 


une ligne 

2.5 Créez votre jeu en Basic 42 
2.5.1 Présentation du jeu 42 
2.5.2 Instruction IF ... THEN ... ELSE 43 
2.5.3 Première version du jeu 46 
2.5.4 Fonction RND 47 
2.5.5 Fonction INT 48 
2.5.6 L'instruction REPEAT ... UNTIL 49 
2.5.7 Seconde version du jeu 50 
2.5.8 L'instruction WAIT 50 
2.5.9 L'instruction EXPLODE 50 
2.5.10 Notion de boucle - FOR ... NEXT 51 

2.6 Conclusion 52 
Chapitre 3 : Le langage Basic de l'Oric 53 
3.1 Généralités 53 
3.2 Constantes - Variables - Indices 54 
3.2.1 Les constantes 54 


- les constantes numériques 
- les constantes alphanumériques 


SANT = 


3.4 


3.5 


3.7 


3.2.2 Les variables simples 
— les chaînes de caractères 
- les variables entières 
— les variables réelles 
3.2.3 Les tableaux 
— les tableaux de variables entières 


- les tableaux de chaînes de caractères 


— les tableaux de variables réelles 
Les opérateurs 


Les opérateurs arithmétiques 

Les opérateurs relationnels 

Les opérateurs logiques 

— action de AND 

— action de OR 

- action de NOT 

3.3.4 Règles d'évaluation des expressions 


3 
3% 
3 


œ © 
S D 


Les instructions Basic facultatives 


3.4.1 CLEAR 

3.4.2 DIM 

3.4.3 END 

3.4.4 Fonction FRE 
3.4.5 Instruction LET 
3.4.6 Arrêt STOP 

3.4.7 Commentaires REM 


Les instructions de transfert 
3.5.1 Branchement inconditionnel 
— GOTO 
— ON ... GOTO 
3.5.2 Transferts conditionnels 
— IF ... THEN ... ELSE 
Les boucles 


3.6.1 Boucle FOR ... NEXT 
3.6.2 Boucle REPEAT ... UNTIL 


Les sous-programmes 


3.7.1 Présentation -— GOSUB - RETURN 
3.7.2 ON ... GOSUB 


— VIT — 


58 


64 


71 
71 


72 
73 


74 


79 


82 


83 


84 
88 


89 


89 
91 


3.7.3 Appel de sous-programmes assembleurs - 
CALL 
3.7.4 Fonctions assembleurs DEF ... USR 


3.8 Les fonctions 


3.8.1 Fonctions numériques internes 

- génération d'un nombre aléatoire 

- fonctions mathématiques simples 

- fonctions mathématiques complexes 
3.8.2 Fonctions de traitement des chaînes de 

caractères 

- conversion code ASCII/caractère 

- conversion chiffre/lettre 

- extraction/traitement de chaînes 
3.8.3 Création de fonctions utilisateurs 


3.9 Les entrées - sorties 


3.9.1 Entrées de données - 
L'instruction INPUT 
3.9.2 Saisie d'un caractère - 
L'instruction GET 
3.9.3 Saisie au vol d'un caractère - 
la fonction KEYS 
3.9.4 Lecture des données dans le programme 
READ ... DATA 
3.9.5 L'instruction RESTORE 


3.10 Conclusions 


Chapitre 4 : Possibilités graphiques de l'Oric 
4.1 Introduction 
4.2 Les modes graphiques 
4.2.1 Les modes basse-résolution TEXT, 
LORES O0, LORES 1 
4.2.2 Le mode haute-résolution HIRES 
4.3 Les commandes graphiques 
4.3.1 Commandes graphiques basse-résolution 
- affichage d'un caractère PLOT 


- lecture du caractère affiché SCRN 


- VIII - 


92 
92 


92 


92 


93 


95 


97 


97 


98 


98 


99 


100 


101 


101 


102 


102 


106 


108 


108 


4.3.2 


Commandes graphiques haute-résolution 
— positionnement du curseur CURSET 

- déplacement du curseur CURMOV 

— tracé d'une droite DRAW 

- utilisation de pointillés PATTERN 

- affichage d'un caractère CHAR 


- tracé d'un cercle CIRCLE 
— obtention de la couleur 

d'un point POINT 
— remplissage de lignes FILL 


- effets spéciaux 


4.4 Graphiques avancés 


Chapitre 5 


: Les sons et l'Oric 


5.1 Introduction 


5.2 Les sons prédéfinis 


5.3 Les commandes de sons 


5.3.1 


5.3.3 


SOUND (canal, période, volume) 

— le canal 

- la période 

— le volume 

MUSIC (canal, octave, note, volume) 
— le canal 

— l'octave 

- la note 

- le volume 

PLAY (combinaison des canaux, 

du bruit, mode de sortie, période) 
— combinaison des canaux de sons purs 
— combinaison de bruits 

- mode de sortie 

- la durée du son 


= TX — 


114 


127 


135 


135 


136 


136 


137 


138 


141 


ANNEXES 

A) Récapitulation des fonctions et 
commandes du basic 

B) Les messages d'erreur 

C) Utilisation d'un magnétophone à cassettes 

D) Utilisation d'une imprimante 

E) Numérotation hexadécimale - 
représentation des nombres 

F) Tableau des codes ASCII 

G) Carte mémoire de l'Oric 

H) Rôle des attributs graphiques 


144 


145 


178 


181 


183 


187 


188 


189 


CHAPITRE 1 


Présentation 


générale 
de l'oric 





1.1 INTRODUCTION 


L'Oric est un microordinateur : il est extrêmement 
petit par rapport aux premiers ordinateurs et son “coeur” 
est un microprocesseur. Ainsi que vous pouvez le voir sur 
la photo A, l'Oric a un clavier utilisé pour “entrer” des 
données et de nombreuses prises pour relier la télévision 
et les extensions. À l'intérieur sont placés les circuits 
intégrés parmi lesquels figurent le microprocesseur, les 
mémoires... (voir paragraphe 1.3). Au début, vous n'avez 
besoin d'aucune connaissance en électronique pour utili- 
ser votre Oric. 


La sortie vidéo est présente à l'arrière de l'appa- 
reil et délivre des signaux RVB que l'on transmet à la 
télévision par l'intermédiaire de la prise Péritel, four- 
nie avec l'Oric (voir paragraphe 1.4) et qui est instal- 
lée obligatoirement sur tous les téléviseurs en couleurs 
produits depuis 1980, en France. 


La photo A montre un Oric 1 avec un gros plan sur le 
clavier. 


ASSSSSSSSSssn 


Lo Lo rar Lord 


x EU 





PHOTO À : LE SYSTEME ORIC 


Votre microordinateur Oric offre de nombreuses pos- 
sibilités graphiques et sonores. Avec un affichage gra- 
phique haute-résolution de 200 x 240 points sur l'écran, 
plusieurs couleurs, vous pourrez utiliser des jeux 
graphiques, tracer des courbes sur l'écran.... Avec la 
sortie sonore en connexion avec une chaîne hi-fi, vous 
pourrez composer de la musique... 


Avec l'Oric, vous pouvez vous contenter de programmes 
tout faits (jeux, gestion familiale...), mais vous pouvez 
aussi composer vos programmes, utiliser des cassettes, 
communiquer avec d'autres Oric.... Votre microordinateur 
s'avérera bientôt indispensable. 


1.2 LE CLAVIER DE L'ORIC 


Le clavier incorporé sur la face avant du boîtier 
comporte cinquante-sept touches. Il permettra de générer 


les lettres majuscules et minuscules, les touches fonc- 
tions utilitaires (ESC, RETURN, DEL...), les caractères 
spéciaux (ponctuation, opérations...). Il comporte en 
outre une barre centrale permettant de générer des 
blancs, quatre touches situées de part et d'autre de la 
barre centrale et permettant de se déplacer sur l'écran 
(gauche/droite/bas/haut). Toutes les touches sont à répé- 
tition automatique, c'est-à-dire qu'il suffit de laisser 
le doigt appuyé sur la touche pour répéter le caractère 
plusieurs fois. 


Les touches du clavier de l'Oric sont tactiles. Vous 
sentirez avec votre doigt qu'une touche sera enfoncée, et 
vous entendrez de plus un léger bruit caractéristique. 
Cela permet par exemple de compter à l'oreille le nombre 
de caractères, sans regarder le clavier. 


L'Oric ayant été créé en Angleterre, la disposition 
des touches sur le clavier est identique à celle des 
machines à écrire anglaises (QWERTY). Toutefois, ceci ne 
doit pas vous gêner si vous connaissez les machines à 
écrire françaises, la différence étant limitée aux let- 
tres À, Z, Q, W, et M. 


Le clavier de l'Oric est simple d'emploi et vous se- 
rez vite familiarisé avec lui. 








PHOTO B : VUE DU CLAVIER 


— 3 - 


1.3 UNITE CENTRALE 


L'Oric est avant tout une machine à traiter l'infor- 
mation. Elle reçoit, stocke, traite et communique des 
données avec le clavier, un téléviseur couleur, ou avec 
un magnétophone à cassettes. 






UNITE 
Clavier 





Magnétophone 
à cassettes 


CENTRALE 






Téléviseur couleur 


FIGURE 1 : STRUCTURE DE L'ORIC 


Le coeur de votre microordinateur est appelé unité 
centrale (en anglais Central Processor Unit, ou 
CPU en abrégé). Cette unité centrale supervise le 
fonctionnement du système Oric tout entier. 


Elle décide quand aller chercher les données au cla- 
vier ou en envoyer sur l'écran, sur la cassette... Elle 
exécute les programmes que vous lui demandez. 


L'unité centrale est organisée autour d'un simple 
circuit intégré (boîtier noir muni de pattes) appelé 
microprocesseur. Ce boîtier fait les calculs, va chercher 
les données et les range. Pour pouvoir travailler assez 
rapidement, le microprocesseur ne va pas demander une à 
une les données au clavier ; il a besoin pour cela d'au- 
tres circuits, appelés mémoires, qui contiennent le pro- 
gramme et la plupart des données utiles au programme. 


Mémoire 
RAM 
Entrées 
- Interface Microprocesseur 
——— 
Sorties 


Mémoire 
ROM 





FIGURE 2 : UNITE CENTRALE 


Deux types de mémoire existent et sont représentées 
sur la figure 2 : 


- mémoire ROM (Read Only Memory) ou mémoire morte ; 
- mémoire RAM (Random Access Memory) ou mémoire vive. 


Une mémoire morte est un stock d'instructions, de 
données... dont le contenu est permanent, n'est pas effa- 
cé lorsque l'on coupe le courant, et qui contient, par 
exemple, des programmes de communication avec le clavier. 
Le contenu d'une mémoire morte de l'Oric est défini par 
le constructeur de la machine et vous ne pourrez y tou- 
cher. 


- 5 - 


Dans une mémoire RAM (ou vive), on peut écrire, lire 
ou effacer de l'information aussi souvent qu'on le sou- 
haite ; elle contiendra, par exemple, les programmes que 
vous taperez, mais elle sera effacée par toute coupure du 
courant. 


Le microprocesseur de l'Oric est le même que celui de 
l'Apple II ou du Vic 20. La taille des mémoires de l'Oric 


« 


peut varier de 16 000 à 48 000 caractères en mémoire 
vive. 


La mémoire morte contient l'équivalent de 16 000 ca- 
ractères pour stocker le langage de programmation Basic 
auquel nous vous initierons aux chapitres 2 et 3. 


Dans la suite de ce livre, nous utiliserons le symbo- 
le K pour représenter le chiffre 1024 (= 2 ). 


Ainsi, par exemple, 16 k = 16.384 soit 16.000 envi- 
ron. 


La photo C, ci-dessous, montre l'intérieur de votre 
Oric. Le microprocesseur, les mémoires RAM, les mémoires 
ROM ainsi que le haut-parleur y sont clairement visibles. 


ns 


4 


È 


4! 


; 


sonne nnaennr 


55: 
Li 


s. 
+ 


ë 





PHOTO C : STRUCTURE INTERNE DE L'ORIC 


— 6 — 


1.4 SORTIE VIDEO 


Deux prises existent sur la face arrière de l'Oric 
pour le relier à un téléviseur couleur : 








Prise’ d'antenne 
pour téléviseur Pal 
Secam anglais 





Prise Péritel 
pour téléviseur 


Vous disposez donc de deux options : 


a. branchement sur l'entrée Péritel pour téléviseur 
couleur 

b. branchement sur l'entrée Prise d'antenne pour 
téléviseur anglais. 


La première solution vous donnera une qualité net- 
tement meilleure que la seconde (couleurs, netteté...). 


Si vous n'avez pas de prise Péritel sur votre télévi- 
seur, il est tout à fait possible de la faire installer 
par un revendeur spécialisé, 


1.5 SORTIE CASSETTE 


La connection se fait par l'intermédiaire d'une prise 
DIN. C'est le format classique Tangerine qui est utilisé. 


Les vitesses d'enregistrement vont de 40 à 300 caractères 
par seconde. Un circuit spécial de l'Oric élimine les 
bruits parasites. Tous les types d'informations peuvent 


être sauvegardés (programmes, données, blocs mémoire...). 


Il serait prématuré d'énumérer ici les commandes spé- 
cifiques à l'interface cassette, attendu que vous n'avez 
encore aucun programme ou exécution de programme à sauve- 
garder sur cassette. Une annexe sera consacrée à ces com- 
mandes (de même pour la sortie imprimante), et vous vous 
y reporterez. Pour l'heure, nous nous contenterons d'une 
description technique. 


1.6 EXTENSIONS 


Reportez-vous à la figure 1 de la page suivante. 
Vous pouvez y voir, à côté du branchement imprimante, un 
branchement pour extensions. Ces possibilités d'extension 
sont des connexions de cartouches ROM par exemple, c'est- 
à-dire que vous pouvez brancher une ligne pour étendre 
les mémoires. Vous pouvez aussi connecter des cartouches 
de jeux, un lecteur de disques, et bien sûr un modem (mo- 
dulateur-démodulateur) qui transformera les signaux codés 
constituant votre programme pour les rendre aptes au 
transport par ligne téléphonique. C'est le système 
Prestel Mailbox qui est utilisé. 


1.7 MISE EN ROUTE 


Oric n'est déjà plus un inconnu, mais il reste à le 
mettre en route. 


Vous vous trouvez devant : 


— l'ordinateur, avec son clavier ; 

- deux adaptateurs 
. le plus gros sert à l'alimentation, 
. le plus petit fournit un voltage indispensable 
pour permuter la prise Péritel en mode vidéo. L'a- 
limentation Péritel permet de sélectionner l'entrée 
RVB parmi les trois entrées possible. 

- une prise Péritel. Selon l'importateur d'Oric, la 
prise Péritel peut intégrer le petit adaptateur 
précédent. 


Port d'extension 










Branchement 
téléviseur 
sur prise 


d'antenne Alimentation 


Branchement de 
l'imprimante 


Prise 5 broches Prise 7 broches 
Péritel pour cassette 
téléviseur ou 
moniteur 
FIGURE ll 


Sur l'extrémité de la prise Péritel correspondant au 


récepteur, vous enfichez la prise en croix reliée au plus 
petit des deux adaptateurs. 


Oric n'a pas de touche ARRET/MARCHE. 


Il faut couper 
l'alimentation pour l'arrêter. 


Vos branchements faits, 


vous devez voir apparaître 
sur l'écran : 


ORIC EXTENDED BASIC VI1.C 
(C) 1983 TANGERINE 

..+. BYTES FREE 

Ready 


FIGURE 2 


— 9 — 


Voilà, vous êtes prêt à découvrir le monde de l'in- 
formatique. 


Que vos goûts vous conduisent vers les mathématiques, 


la gestion, le dessin, la musique ou l'informatique en 
elle-même, vous allez devenir plus efficace. 


_— 10 - 


CHAPITRE 2 


Initiation 


à la 
programmation 





2.1 INTRODUCTION 


Si vous avez suivi les instructions du chapitre con- 
cernant la mise en route, vous savez maintenant effectuer 
rapidement les branchements nécessaires. 


Voici donc l'appareil sous tension, convenablement 
relié à votre récepteur de télévision. Si vous n'avez pas 
fait d'erreur de branchement, vous voyez apparaître sur 
l'écran, en noir sur fond blanc 


ORIC EXTENDED BASIC VI1.0 
(C) 1983 TANGERINE 
47870(*) BYTES FREE 
Ready 


Si tel n'était pas le cas, reportez-vous au chapitre 1. 


Le rectangle noir clignotant, qui apparaît sur le 
bord supérieur gauche de l'écran, sous le mot Ready, 
s'appelle le curseur. Il détermine l'emplacement du ca- 
ractère que l'on veut écrire, et se déplace au fur et à 
mesure sur la ligne. 


(*) Ce nombre peut être inférieur, selon la version 


d'Oric en présence. 
— 11 - 


Essayons par exemple de taper au clavier 


BONJOUR 


Le mot BONJOUR s'écrit sur l'écran au fur et à mesure 
que nous le tapons. Oric va-t-il nous répondre ? 


Nous avons terminé, et... il ne se passe apparemment 
rien. En fait, pour qu'Oric prenne en compte une ligne 
que l'on vient de taper, il faut le lui demander en ap- 
puyant sur la touche marquée [RETURN]. 


Oric répond alors 
? SYNTAX ERROR 
Ready 


Que s'est-il passé ? L'ordinateur a lu notre message, 
a constaté qu'il n'était pas écrit suivant la “bonne” 
syntaxe et nous a signalé le fait par un message d'er- 
reur. 


Tapons maintenant 
PRINT "BONJOUR" 


Pour taper les guillemets il faut enfoncer l'une des 
touches [SHIFT]J, la maintenir, et appuyer en même temps 
sur la touche marquée [,"]. De manière générale, il faut 
procéder de la même façon pour obtenir le caractère du 
haut sur les touches à double fonction. 


Appuyons ensuite sur [RETURN]. 


En principe, tout message que vous taperez devra être 
suivi de la touche [RETURN] ; nous vous le rappellerons 
d'abord systématiquement puis, peu à peu, nous l'omet- 
trons. Elle sera sous-entendue mais devra toujours être 
tapée. 


Si vous avez composé exactement les lettres ci-des- 
sus, sans oublier les guillemets, vous obtenez immédiate- 
ment sur l'écran 


BONJOUR 


Ready 
— 12 - 


Oric a imprimé BONJOUR et nous informe, en affichant 
Ready, qu'il est prêt à enregistrer d'autres messages. 


Nous voyons donc que pour communiquer avec Oric, il 
faudra toujours taper nos messages en respectant rigou- 
reusement une certaine syntaxe, qui fonde en fait un vé- 
ritable langage. 


Avant de voir plus précisément ce qu'est ce langage, 
il faut introduire un certain nombre de notions : 


2.1.1 Stockage de l'information - Bit - Octet 


Oric est un microordinateur, dérivé des grands ordi- 
nateurs qui fonctionnent actuellement dans le monde in- 
dustriel. Mais ne nous y trompons pas : s'il a une taille 
très réduite, son principe de fonctionnement est en tout 
point semblable à celui de ses "aînés". Comme eux, c'est 
une machine de traitement automatique de données. 


Et une des opérations essentielles qu'Oric — comme 
tout ordinateur -— doit pouvoir effectuer sur l'informa- 
tion, est sa mémorisation. 


A un autre niveau, c'est ce qui se passe lorsque vous 
mettez un nombre en mémoire dans votre calculatrice de 
poche. 


La meilleure méthode que l'on connaisse actuellement 
pour mémoriser une information est un codage binaire, 
c'est-à-dire qui réduit tout élément à deux états 
bien distincts. Ce peut être par exemple l'absence ou 
la présence de trou dans une carte perforée, un élément 
aimanté dans un sens ou dans l'autre. 


Oric, lui, utilise des éléments de circuits électro- 
niques qui peuvent être portés à une tension de 5V, ou 
bien rester à O. 


L'information contenue dans un tel élément s'appelle 
BIT (abréviation de l'expression anglaise BINARY 
DIGIT, qui signifie chiffre binaire) et contient en 
quelque sorte la réponse par oui ou par non à une certai- 
ne question. 


Mais un seul BIT contient une information trop 
“petite pour être manipulée aisément. C'est pourquoi on 
les regroupe généralement par paquets de 8, ou 
OCTETS. 


11 y a une remarque intéressante à faire ici. On se 
souvient qu'Oric, dès qu'on le met sous tension, affiche: 


47870 BYTES FREE 


Or en anglais OCTET se dit BYTE. Si l'on sait 
que FREE signifie LIBRE, on voit que la mémoire 
d'Oric a une capacité de 47870 octets. 


En pratique, sachez que sur un octet il est possible 
de représenter les nombres inférieurs à 256 ou les carac- 
tères du clavier. Les autres nombres seront représentés 
sur plusieurs octets. 


Les lecteurs intéressés par ce codage peuvent lire la 
suite de ce paragraphe. Les autres personnes passeront au 
paragraphe 2.1.2. 


Un octet étant un paquet de 8 bits, supposons que 
l'on représente les deux états que peut prendre un 
bit par O et 1. Un octet pourra alors s'écrire comme 
une succession de huit O0 ou 1 ; par exemple 00100010, 
ou 11101001... En fait, comme il y a deux possibili- 
tés pour chaque bit, on a 256 possibilités différen- 
tes pour un octet. 


On peut maintenant comprendre comment un 
OCTET pourra représenter un nombre : il suffit de 
considérer que la suite de huit O0 ou 1 qui constitue 
un octet est un nombre écrit dans le système de 
numérotation binaire. 


Ainsi 00100010 représentera 
5 


0 207-000 de fre 27 40 


x 2 + 0 x 
2. 002 Le DE Ox20 0137: 2e 


2 

Cela n'a absolument rien de mystérieux. Nous 
faisons chaque jour la même chose lorsque nous écri- 
vos un nombre en base dix. Par exemple 534 vaut 5 x 


1024 3% l0 HAE 107 


= JA = 


Mais avec notre convention, on s'aperçoit que le 
nombre le plus grand qu'on puisse écrire est 11111111 
= 255. Pour pouvoir représenter des nombres plus 
grands que 255, il faudra qu'un nombre occupe plus 
d'un octet, mais le principe reste le même. 


Stocker des nombres est donc finalement relative- 
ment facile. Mais comment faire pour stocker des 
lettres ou des caractères ? Là encore, rien de plus 
simple. Il suffit de considérer par exemple les codes 
ASCII où À = 01000001, B = 01000010, et ainsi de sui- 
te pour toutes les lettres. Comme il y a 256 possi- 
bilités dans un octet, on peut avoir un jeu de 256 
caractères différents, ce qui permet de représenter 
toutes les lettres, minuscules et majuscules, les 
chiffres, les caractères de ponctuation, etc. 


2.1.2 Notion de langage — Le Basic 


Comme on peut le penser d'après la façon de stocker 
l'information, le seul langage qu'Oric “comprenne” vrai- 
ment est le langage binaire, composé d'une succession de 
BITS, et qu'on appelle encore “langage machine". 


Cela signifie-t-il que nous sommes obligés d'intro- 
duire toutes nos commandes et instructions sous la forme 
d'une succession de 0 et de 1 ? Heureusement non ! Ce se- 
rait beaucoup trop compliqué à écrire et à comprendre (du 
moins pour nous, mais pas pour la machine, qui est litté- 
ralement infatigable). 


Pour nous éviter cette peine, il existe ce que l'on 
appelle des langages évolués. Ce sont d'autres langages 
de programmation que le langage machine, mais qui sont 
beaucoup plus proches du langage humain et des notations 
mathématiques usuelles. Par suite, ils sont beaucoup plus 
aisés d'emploi. 


Il existe un certain nombre de tels langages, chacun 
étant plus ou moins adapté à un usage spécifique. Parmi 
les plus connus, on peut citer FORTRAN, COBOL, PASCAL, 
PL1, ... et BASIC, qui est le langage employé par Oric. 


BASIC est le langage actuellement le plus répandu sur 


- 15 - 


s 


les microordinateurs. Sa très grande diffusion tient à sa 
facilité d'apprentissage : BASIC est en effet le langage 
le plus facile à apprendre et à utiliser par les débu- 
tants. 


Il a été créé en 1964 pour permettre l'apprentissage 
facile de la programmation, et son nom est l'abréviation 
de Beginner's All purpose Symbolic Instruction Code, 
ce qui signifie : codage symbolique des instructions 


d'usage général pour les débutants. 


Nous savons donc qu'Oric “comprend” le BASIC ; ïil 
nous reste maintenant à apprendre nous-même ce langage, 
pour pouvoir utiliser notre microordinateur. C'est le but 
des chapitres qui suivent. Nous verrons que ce n'est pas 
très difficile, car BASIC est un langage bien plus facile 
à apprendre qu'une langue étrangère : il ne comprend en 
effet qu'une centaine de mots ! 


Remarquons que BASIC est susceptible de varier légè- 
rement d'un microordinateur à l'autre, un peu de la même 
façon, par exemple, qu'une langue est susceptible d'avoir 
des variantes locales d'une région à l'autre. 


Ce n'est pas grave dans la mesure où l'on programme 
toujours sur le mêm microordinateur. Mais on peut être 
amené à changer de machine. (Attention : tous les Orics 
“parlent” bien le même BASIC ; les différences sont sen- 
sibles entre des machines de constructeurs différents). 
Aussi ce chapitre présente-t-il les instructions de base 
communes à toutes les versions de BASIC. Les instructions 
plus élaborées, ainsi que les instructions BASIC spécifi- 
ques à Oric sont présentées dans le chapitre suivant. 


2.2 MODE DIRECT -— MODE DIFFERE -— NOTION DE PROGRAMME 
2.2.1 Introduction 


Nous avons déjà rencontré une instruction BASIC, 
c'est l'instruction PRINT. Comme son nom l'indique (en 
anglais, PRINT signifie imprimer) elle permet d'écrire 
sur l'écran. Son emploi est très simple. De la même façon 
que nous avons su faire écrire BONJOUR, nous pourrons 
écrire une ligne de texte quelconque en tapant cette li- 
gne après PRINT, sans oublier de mettre des guillemets 
(") de part et d'autre de la ligne de texte, comme dans 
l'exemple suivant 

_- 16 - 


PRINT "CECI EST UNE LIGNE DE TEXTE" 
Tapons maintenant : 
PRINT 2 + 3 


(Pour taper + il faut appuyer simultanément sur 
[SHIFT] et sur la touche [+=]). 


Appuyons sur [RETURN] 

11 s'affiche alors immédiatement sur l'écran 
5 
Ready 


Oric a effectué le calcul et a immédiatement imprimé 
le résultat. 


Ce mode de fonctionnement, dans lequel une instruc- 
tion est exécutée immédiatement après avoir été tapée, 
est dit “mode immédiat", ou “mode d'exécution immédiate”, 
ou encore ‘mode direct". 


C'est très proche du fonctionnement de votre calcula- 
trice de poche où les calculs se font au fur et à mesure 
que vous les rentrez. La seul différence, c'est qu'il 
faut d'abord taper PRINT. 


Nous y reviendrons. Avant cela, il faut voir le se- 
cond mode de fonctionnement. 


Tapons 
20 PRINT 2 + 3 


Appuyons sur [RETURN] ... cette fois, il ne se passe 
rien ! 


Tapons encore 
10 PRINT "BONJOUR" 
Appuyons sur [RETURN] : toujours rien. Serait-ce une 


panne ? 


17 


Mais tapons maintenant : 
RUN 
et appuyons sur [RETURN]. Il apparaît alors à l'écran : 


BONJOUR 
5 


Ready 


Expliquons ce qui s'est passé. Oric, au lieu d'exécu- 
ter immédiatement les instructions, les a mises en mémoi- 
re où elles constituent ce que l'on appelle un PROGRAMME. 


En tapant RUN, nous avons signalé à Oric qu'il pou- 
vait exécuter ce programme, c'est-à-dire exécuter les 
instructions les unes après les autres. On dit qu'il a 


un 


fonctionné suivant le “mode différé”, ou “mode program- 


mé", son second mode de fonctionnement. 


Ce mode se caractérise par la présence d'un numéro en 
tête de chaque ligne. C'est ce qui permet de déterminer 
le mode dans lequel on se trouve, car, avec quelques ex- 
ceptions, toutes les instructions utilisables en mode 
programmé le sont aussi en mode direct. 


Le numéro en tête de ligne a aussi une autre utilité. 
I1 fixe l'ordre dans lequel seront exécutées les instruc- 
tions. Nous avons pu remarquer en effet que la ligne 10 a 
été exécutée avant la ligne 20, bien qu'elle ait été ta- 
pée après. En mode programmé, l'ordre dans lequel on tape 
les lignes n'a donc aucune importance ; Oric exécutera de 
toute façon les instructions par ordre de numéros de li- 
gne croissants. 


Nous verrons bien vite que le mode de fonctionnement 
le plus intéressant d'Oric est le mode programmé. 
Néanmoins, pour mieux nous familiariser avec son fonc- 
tionnement, nous allons nous intéresser d'abord au mode 
direct. 


2.2.2 Fonctionnement en mode direct 
Nous allons, en fait, apprendre d'abord à nous servir 
d'Oric comme d'une calculatrice de poche, en apprenant à 


évaluer les expressions arithmétiques. 


sA8"= 


- Les opérations élémentaires 
+ ADDITION 


Nous savons déjà additionner : pour ajouter 12 à 27, 
nous avons compris qu'il suffit de taper 


PRINT 12 + 27 


N'oublions pas d'appuyer sur [RETURN] (ce sera désor- 
mais sous-entendu). Oric affiche aussitôt le résultat 


39 
Ready 


Rappelons que READY (mot anglais pour PRET) si- 
gnifie qu'Oric a terminé d'exécuter les instructions que 
nous lui avions fournies et qu'il se tient prêt à enre- 
gistrer de nouvelles commandes. 


SOUSTRACTION 


La soustraction ne fait pas plus de difficulté ; es- 
sayons par exemple 


PRINT 8 - 2.5 


On obtient 5.5. Notons le point à la place de la vir- 
gule. Oric, comme tous les ordinateurs, utilise la nota- 
tion arithmétique anglo-saxonne, dans laquelle on écrit 
12.25 au lieu de 12,25. 


Supposons qu'à la ligne précédente, nous nous soyons 
trompés et ayons tapé : 
PRINT 8 - 2,5 


Nous obtenons alors 
6 5 


Oric a considéré la virgule comme un séparateur entre 
deux valeurs. Il comprend qu'il faut imprimer 8 - 2, soit 
6, puis la valeur 5. Ce n'est pas du tout ce que nous 
voulions obtenir, et cela nous montre combien il faut 
être précis dans ce que nous tapons 
Oric obéit à la lettre à ce que nous lui commandons. 


_- 19 —- 


Néanmoins, malgré tout le soin que nous apportons en 
tapant nos messages, une erreur est toujours possible. 
Comment faire pour la corriger ? Reprenons cet exemple : 


PRINT 8 - 2,5 


mais nous n'avons pas encore appuyé sur la touche 
[RETURN ]. 


Pour corriger notre erreur, et remplacer la virgule 
par un point, il faut utiliser la touche [DEL] : elle 
permet de faire reculer le curseur. 


Dans notre exemple, appuyons une fois sur [DEL] : le 
curseur recule d'un cran et 5 disparaît. Appuyons une au- 
tre fois, et la virgule disparaît. Nous pouvons alors ta- 
per un point et retaper le 5 : notre erreur est réparée. 


ATTENTION : Il ne faut pas utiliser la touche [e-| 
; le curseur recule bien aussi, comme avec la touche 
[DEL] ; on pourra même remplacer la virgule par un 
point, et cela sans que le 5 s'efface ; mais en fait 
ces modifications n'auront eu lieu que sur l'écran : 
Oric ne les aura pas prises en compte. 


L'usage de la touche [é—] et des touches analogues 
sera abordé ultérieurement. 


Si nous avons fait beaucoup d'erreurs dans la même 
ligne et que nous préférons la retaper entièrement, nous 
pouvons appuyer simultanément sur [CTRL] et sur [X]. Le 
caractère \ apparaît au bout de la ligne, dont il ne sera 
plus tenu compte : bien qu'elle soit toujours imprimée 
sur l'écran, Oric considère la ligne comme effacée. 


Nous pouvons alors la retaper car, simultanément avec 
l'apparition du caractère \ , le curseur a sauté au début 
de la ligne suivante. 


+ MULTIPLICATION 


Le symbole de la multiplication est * (qu'on obtient 
en appuyant simultanément sur les touches [SHIFT] et 


[8]). 
PRINT 4 * 16 
donne 64 


— 20 - 


Peut-être trouvez-vous un peu fastidieux de taper les 
cinq lettres du mot PRINT avant chaque opération ? En 
fait, il suffit de taper [?] au lieu de PRINT. C'en est 
en quelque sorte une abréviation qui accélère la frappe. 
Oric comprend les deux termes de la même façon. Dans la 
suite, nous utiliserons indifféremment ? ou PRINT. 


+ DIVISION 


Pour effectuer une division, le symbole est / qui se 
prononce SLASH. 


Essayons 
% 2/3 


N'oublions pas d'appuyer sur [RETURN] ! 
On obtient : 
.666666667 
Le zéro avant le point décimal est omis, mais on 
pourra remarquer qu'il est barré pour ne pas le confondre 
avec la lettre O. 
+ PUISSANCE 
Il reste une dernière opération élémentaire, très 
utile, l'élévation à la puissance. Son symbole est T (que 
l'on obtient par [SHIFT] [6]). 
PRINT 4 1 3 
3 
donne 64 (= 4°). 
On peut ainsi obtenir par exemple la racine carrée 
par : 
? 25 1 0.5 
qui donne 5 


Signalons qu'il existe une autre possibilité : la 
fonction SQR. On l'utilise de la façon suivante : 


? SQR (25) 


Elle donne aussi la racine carrée, mais le calcul en 
est plus rapide. 


— 21 - 


- Les ordres de priorité des opérateurs 


Nous avons donc découvert les 5 opérations mathémati- 
ques fondamentales : 


LE nr ue 6 À 


Mais nous n'avons vu que des exemples très simples. 
On peut calculer des expressions plus compliquées conte- 
nant plusieurs opérateurs. Essayons les quelques exemples 
suivants : 


?25+3*%24 
28:26:02 
2 5% 68 /-& 
22*37T2 


Le premier a pour résultat 17 (= 5 + 12) et non pas 
32 (= 8 * 4) car Oric évalue d'abord la multiplication. 
On dit que la multiplication est prioritaire sur l'addi- 
tion. 


De même, la deuxième expression donne 5 : on évalue 
d'abord la division. 


Pour la troisième, on obtient 10 : les calculs sont 
effectués dans l'ordre où ils se présentent, car * et / 
ont même priorité. 

Enfin le quatrième exemple a pour résultat 18 : 
l'élévation à la puissance est effectuée en premier car 
elle est prioritaire sur la multiplication. 


Pour nous résumer, il faut retenir que les calculs 
sont effectués de gauche à droite, sauf s'il y a des 
priorités à respecter entre les divers opérateurs. Ces 
priorités sont les suivantes : 


est toujours effectué en premier, puis 
qui ont la même priorité, et enfin 
qui sont aussi “ex aequo". 


+ + — 


à 


Pour changer l'ordre de priorité, on emploie des 
parenthèses, car une expression entre parenthèses est 
toujours évaluée la première. Par exemple : 


— 22 — 


(4 + 3) * 2 donne 14 alors que 4 + 3 * 2 donne 10 
(2 * 3) T 2 donne 36 alors que 2 * 3 T 2 donne 18 
7 - (3 + 2) donne 2 alors que 7 - 3 + 2 donne 6 


Il peut y avoir des parenthèses emboîtées, mais 
alors il faut veiller à ce qu'il y ait bien autant de pa- 
renthèses ouvrantes “(" que de parenthèses fermantes "“})", 
pour que l'expression ait un sens. 


Les parenthèses emboîtées suivent la règle de la plus 


intérieure vers la plus extérieure, et de la gauche vers 
la droite. 


Ainsi, 
(& +2) #37 (7 - (3 + 2)) est correct. 
Mais ((8 - 6) * ((3 - 2) T 6) / 2 
provoquera un 


? SYNTAX ERROR 


- Notion de variable 


Au stade où nous en sommes, nous savons évaluer des 
expressions, même très compliquées, mais tout ce que nous 
pouvons en faire, c'est faire imprimer leur valeur sur 
l'écran. 


En fait, il est possible de mettre ces valeurs en mé- 
moire pour les utiliser ultérieurement. Comment faire ? 
Eh bien, il suffit de donner un nom à l'expression que 
l'on veut mettre en mémoire, comme sur cet exemple : 


B=2+3 
Même après avoir appuyé sur [RETURN], il n'apparaît 
rien d'autre que Ready sur l'écran. Oric a calculé 
l'expression et lui a attribué automatiquement un 
emplacement en mémoire qu'il a nommé B. 


On dit que l'on a constitué une variable de nom B. 


On peut maintenant utiliser cette variable dans d'au- 
tres expressions ; tapons 


_- 23 - 


PRINT B 


nous obtenons 


Tapons 
PRINT 3 * B 
nous obtenons 


15 


Nous pourrions imaginer ainsi un grand nombre d'ex- 
pressions, utilisant la variable B, mais sa valeur ne 
sera jamais détruite (c'est-à-dire qu'elle ne sera jamais 
effacée de la mémoire) sauf lors d'une nouvelle instruc- 
tion d'affectation ; si nous tapons 


B = 3 
alors PRINT B + 1 
donne 4 


REMARQUE : Au lieu de taper B = 3 nous aurions pu 
écrire LET B = 3 (ce qui signifie “affecter à B la 
valeur 3"). Ces deux formes sont absolument équiva- 
lentes, Oric ne fera pas de différence. En fait, il 
est plus simple de taper B = 3 ; si nous signalons 
l'instruction LET c'est que, avec certains BASIC 
implantés sur d'autres microordinateurs, cette ins- 
truction est obligatoire, ce qui n'est pas le cas 
pour Oric. 


Nous avons considéré la variable B, mais nous aurions 
pu aussi l'appeler C, ou A, ou NOMBRE.... En fait les 
noms des variables sont pratiquement arbitraires. Il suf- 
fit de respecter les 3 règles suivantes 


- Le premier caractère doit être une lettre : A, B ... Z 
- Les caractères suivants peuvent être des lettres ou des 


chiffres (Ex : B2, NOMBRE, K12J4...). 


a 94 = 


- Le nom de la variable ne doit pas contenir un des mots 
particuliers au langage BASIC, qu'on appelle MOTS-CLES. 
Appeler une variable LETTRE est interdit, car il y a 
LET, mot-clé que nous venons de voir. De même CHIFFRE 
n'est pas utilisable, car il contient IF, mot-clé que 
nous verrons par la suite. 


La liste complète de ces mots-clés est donnée en annexe 
A. 


Une précision importante à retenir, car elle peut 
être la source de nombreuses erreurs, est la suivante 


Quel que soit le nombre de caractères que comporte le 
nom d'une variable, Oric ne prend en compte que les 
deux premiers. 


Des variables distinctes comme NOMBRE et NOM sont 
considérées comme identiques, car les 2 premières lettres 
sont semblables. 


Alors, si nous tapons 


NOMBRE = 2 
NOM = 10 


et si ensuite nous faisons 
PRINT NOMBRE 
nous obtenons 
10 


et non pas 2. En faisant NOM = 10, Oric a remplacé la va- 
leur 2 qu'avait la variable "NO" (seules lettres qu'a 
“vues” Oric) par la valeur 10. En faisant écrire NOMBRE 
(c'est-à-dire pour Oric, toujours la variable “NO") nous 
avons naturellement obtenu la dernière valeur entrée. 


Nous sommes maintenant armés pour aborder le mode 
programmé, ce qui devrait se révéler plus intéressant que 
ce qui précède, peut-être un peu rébarbatif, mais absolu- 
ment nécessaire. 


_- 25 - 


2.3 LES BASES DE LA PROGRAMMATION 
— DECOUVERTE DU LANGAGE BASIC 


2.3.1 Le premier programme 


Nous savons déjà ce qu'est un programme ; nous avons 
vu que c'est un ensemble d'instructions, dont chaque li- 
gne comporte un numéro en tête, et qui sont mises en mé- 
moire. 


On lance l'exécution en tapant RUN ; les instructions 
sont alors exécutées les unes après les autres, par ordre 
de numéros de ligne croissants. 


Notre premier programme va être très simple. Il a 
simplement pour but de calculer la circonférence C d'un 
cercle de diamètre D (C = D). 


10 INPUT D 
20 C= PI * D 
30 PRINT C 


Malgré sa simplicité, ce petit programme comporte les 
étapes fondamentales de tout traitement d'information : 


. L'ACQUISITION DES DONNEES à la ligne 10. Nous y dé- 
couvrons un nouveau mot de BASIC : INPUT. Son effet est 
le suivant : lorsque nous lancerons le programme en ta- 
pant RUN, Oric affichera un ?, suivi du curseur cligno- 
tant. Il attendra ensuite que nous tapions un nombre (qui 
sera le diamètre du cercle). Supposons que nous tapions 
la valeur 2 (suivie comme toujours de [RETURN]). Oric af- 
fectera cette valeur à D, puis passera à la ligne suivan- 
te où sera effectué : 

+ LE TRAITEMENT DES DONNEES à la ligne 20. Il est 
évidemment très réduit ici ; on effectue simplement la 
multiplication de D (qui vaut maintenant 2) par PI (=). 
Cette dernière valeur est “connue” par Oric. Nous pour- 


rons nous en assurer en tapant ultérieurement, en mode 
direct : 


PRINT PI 
et nous obtiendrons : 
3.14159265 


_— 26 - 


Après le traitement des données, c'est-à-dire le cal- 
cul des résultats, vient la dernière étape 


+ LA SORTIE DES RESULTATS à la ligne 30 où l'on affi- 
che la valeur de la circonférence (ici 6.2831853) grâce à 
l'instruction PRINT, que nous connaissons bien mainte- 
nant. 


Si vous avez bien suivi ces trois étapes du fonction- 
nement d'un programme, le reste ne posera pas de problè- 
me, car pratiquement toute la méthode de la programmation 
est contenue dans ces quelques lignes. 


Notre petit programme est susceptible d'être amélio- 
ré, bien qu'il fonctionne parfaitement : pour connaître 
la circonférence d'un cercle de diamètre donné il suffit 
de taper RUN, puis, après le point d'interrogation qui 
apparaît alors, de taper le diamètre du cercle ; la cir- 
conférence s'affiche immédiatement après qu'on a enfoncé 
la touche [RETURN]. 


Si l'on veut la circonférence d'un cercle de diamètre 
différent, il suffit de retaper RUN et le programme est 
réexécuté. Et il le sera autant de fois qu'on retapera 
RUN : cela n'usera pas le programme de le faire exécuter, 
il restera toujours en mémoire (sauf si on débranche 
Oric)! 


Quelles sont les améliorations que l'on aïmerait ap- 
porter ? Tout d'abord, il y a un problème à l'entrée des 
données. En effet, l'instruction INPUT provoque l'affi- 
chage d'un ? seul. Nous savons qu'il faut alors taper la 
valeur du diamètre du cercle, mais nous le savons unique- 
ment parce que nous avons écrit le programme... Autre- 
ment, rien ne nous l'indique, et une personne qui ne con- 
naîtrait pas le programme ne saurait pas quoi taper après 
le ?. 


11 faudrait qu'Oric indique, par un message avant le 
?, que c'est le diamètre du cercle qu'il faut taper et 
pas autre chose. 


Cela peut sembler inutile ici, car le programme est 
simple, mais imaginons un très gros programme qui compor- 
terait de nombreux INPUT. Même si nous l'avions nous-même 
écrit, il ne serait pas inutile qu'il nous rappelle dans 
quel ordre entrer les données. 


- 27 - 


Cela s'obtient très facilement, car l'instruction 
INPUT peut aussi s'employer sous la forme suivante 


INPUT “texte” ; variable 


Le texte entre guillemets apparaît alors, suivi d'un 
point d'interrogation. Il suffit ensuite de taper la va- 
leur demandée, qui est affectée à la variable. 


Dans notre programme, nous aurons résolu notre pro- 
blème en remplaçant la ligne 10 par : 


10 INPUT "QUEL EST LE DIAMETRE DU CERCLE" ; D 


La syntaxe doit être scrupuleusement observée ; en 
particulier les guillemets de part et d'autre du texte, 
ainsi que le point-virgule entre ce dernier et la varia- 
ble sont absolument obligatoires. 


Mais nous n'avons résolu un problème que ‘pour en fai- 
re surgir un autre. Car comment remplacer la ligne 10 
dans notre programme ? En fait, c'est tout simple, il 
suffit de taper la nouvelle ligne 10, sans oublier le nu- 
méro. L'ancienne ligne 10 sera alors effacée de la mémoi- 
re d'Oric où se trouve le programme, et remplacée par la 
nouvelle ligne. 


Cette remarque est très générale : pour remplacer une 
ligne dans un programme, il suffit simplement de la reta- 
per, sans oublier son numéro au début. 


Le problème à l'entrée des données est donc résolu, 
mais la situation est analogue lors de l'impression des 
résultats : on obtient un nombre, mais rien n'indique 
qu'il s'agit de la circonférence du cercle dont nous 
avons entré le diamètre. Là encore, ce n'est pas très 
grave, puisque nous savons ce dont il s'agit ; mais si 
notre programme imprimait de nombreux résultats, il se- 
rait absolument indispensable de les identifier. 


Comment, donc, faire imprimer un message indiquant la 
nature du nombre affiché ? Cela se fait très simplement 
grâce à l'instruction PRINT. Nous savions déjà faire af- 
ficher un texte, en l'entourant par des guillemets ; en 
faisant suivre le texte entre guillemets par une virgule, 


— 28 - 


elle-même suivie de la variable, nous obtiendrons le ré- 
sultat voulu. 


Dans notre cas, on pourra taper par exemple 


30 PRINT “LA CIRCONFERENCE DU CERCLE EST ", C 


Dès lors notre programme est beaucoup plus aisé à 
utiliser : tapons RUN. 


Il apparaît 
QUEL EST LE DIAMETRE DU CERCLE ? 
Tapons un diamètre de 10 ; 
Appuyons sur [RETURN] ; on obtient 
LA CIRCONFERENCE DU CERCLE EST 31.4159265 
Ready 
Si nous voulons déterminer la circonférence d'un au- 
tre cercle, il suffit de retaper RUN et le programme se 
réexécutera. 
2.3.2 Instruction GOTO 


Néanmoins, si nous avions beaucoup de circonférences 
à calculer, ce serait plus agréable de ne pas avoir à ta- 


per RUN à chaque fois. Une nouvelle instruction BASIC va 
nous offrir cette possibilité : l'instruction GOTO. 


Tapons 
40 GOTO 10 
L'effet de cette ligne, ajoutée en fin de programme, 


est de dire à Oric : “va à la ligne numéro 10" (en an- 
glais “go to" signifie “allez à"). 


_ 29 - 


Que va-t-il alors se passer ? Après avoir calculé la 
circonférence et avoir imprimé le résultat, Oric arrive à 
cette ligne 40, qui lui dit de retourner à la ligne 10, 
ce qu'il fait. Il se retrouve donc en début de programme 
et recommence à l'exécuter, c'est-à-dire qu'il affiche à 
nouveau : 


QUEL EST LE DIAMETRE DU CERCLE ? 
C'est exactement ce que nous voulions obtenir ! 


Une telle structure, où un groupe d'instructions est 
répété plusieurs fois, s'appelle une boucle. C'est une 
notion très importante, dont nous verrons d'autres va- 
riantes, et qui permet à l'ordinateur d'effectuer des 
calculs itératifs. 


2.3.3 Commande LIST 


Notre programme ne comporte que 4 lignes, et il est 
donc aisé de s'en souvenir. Mais pour des programmes plus 
longs il sera indispensable de pouvoir faire imprimer les 
instructions telles qu'elles sont stockées en mémoire. 
C'est ce que permet la commande LIST, qui fait “lister” 
le programme en mémoire. Essayons et tapons 


LIST 
Au stade où nous sommes nous obtenons 
10 INPUT "QUEL EST LE DIAMETRE DU CERCLE" ; D 
20C=PI*D 
30 PRINT "LA CIRCONFERENCE DU CERCLE EST ", C 
4O GOTO 10 
Ready 
Cette commande LIST sera revue ultérieurement et com- 
plétée. Pour le moment, revenons à notre programme. IL a 
encore un très gros défaut, il ne s'arrête jamais ! Indé- 
finiment il affichera 
QUEL EST LE DIAMETRE DU CERCLE ? 


En fait , notre programme est un “mauvais programme”, 


- 30 - 


car il comporte une boucle indéfinie, ce qui ne devrait 
jamais se produire. Un bon programme doit être prévu pour 
se terminer de lui-même au bout d'un temps fini. 


Nous verrons par la suite comment mettre en place des 
boucles dont on soit sûr qu'elles se terminent. 


2.3.4 CTRL C -— CONT 


En attendant, il nous faut savoir comment arrêter no- 
tre programme. Supposons que l'exécution soit en cours et 
qu'Oric demande : 


QUEL EST LE DIAMETRE DU CERCLE ? 


Si à ce moment là, nous avons terminé avec le calcul 
des circonférences, il suffira, pour stopper l'exécution, 
d'appuyer simultanément sur la touche [CTRL] et la touche 


[C]: 
Oric affiche alors 
Ready 

Nous avons réussi à stopper l'exécution ! 

[CTRL] [C] est utile dans tous les cas où un pro- 
gramme ne s'arrête pas de lui-même ; mais son effet est 
légèrement différent lorsqu'on l'emploie alors que le 
programme n'est pas en attente sur INPUT (par exemple si 
le programme est en train d'effectuer de longs calculs). 
On obtient 

BREAK IN numéro de ligne 
Ready 

Le numéro de ligne qui apparaît après BREAK IN est 

celui de la ligne où en était le programme lorsqu'on a 


tapé [CTRL] [C]. 


Pour relancer l'exécution, on peut bien sûr taper 
RUN, mais aussi : 


CONT (abréviation de CONTINUER) 


_— 31 — 


Le programme redémarre alors à partir de la ligne où 
a eu lieu le BREAK et non pas, comme avec RUN, depuis le 
début. 


Une autre différence avec RUN est que les valeurs des 
variables sont conservées. On peut donc, par exemple, 
après un BREAK, faire afficher les variables en mode di- 
rect pour connaître l'état du programme, puis reprendre 
l'exécution où elle en était par CONT. 


ATTENTION : Si l'on apporte une modification au 
programme, la reprise de l'exécution devra impérati- 
vement se faire par RUN (et on recommencera donc de- 
puis le début). Si on tape CONT, on aura le message 
d'erreur : 


? CAN'T CONTINUE ERROR 


2.3.5 RESET 


Dans certains cas, pourtant, [CTRL] [C] se révèle 
inopérant ; on n'arrive plus à reprendre la main. 


On peut alors bien sûr débrancher Oric, puis le re- 
brancher, mais tout ce qui était en mémoire est perdu, et 
en particulier le programme, qu'il faut alors retaper. 


Une solution moins brutale consiste à appuyer sur la 
touche RESET. Vous ne la trouverez pas sur le clavier : 
c'est un petit bouton carré, noir, situé sur l'autre face 
d'Oric. Pour y appuyer, il faut un crayon ou tout autre 
objet effilé, car ce bouton est en renfoncement. 


Son effet est le suivant : toute exécution en cours 
est arrêtée, toutes les variables sont remises à zéro ; 
l'appareil est ramené à son état initial, l'état où il se 
trouve lorsqu'on vient de le brancher, avec la différen- 
ce, néanmoins, que le programme est toujours en mémoire. 


Avant de poursuivre et découvrir de nouvelles ins- 
tructions et commandes, nous allons récapituler ce que 
nous avons appris sur les instructions INPUT et PRINT, en 
ajoutant quelques compléments, car ces deux instructions 
sont fondamentales. Ce sont les commandes d'entrées-sor- 
ties par excellence, celles qui permettent le mieux de 
communiquer avec l'ordinateur, et à l'ordinateur de nous 
répondre. 

— 32 - 


2.3.6 Instruction INPUT 


. Une ligne d'instruction de la forme : 
numéro de ligne INPUT variable 
provoque l'apparition d'un point d'interrogation, avec 
mise en attente du programme jusqu'à ce qu'on tape un 


nombre. La valeur tapée sera alors affectée à la va- 
riable. 


. Pour préciser la nature du nombre à entrer, on peut 
ajouter un texte : 


numéro de ligne INPUT “texte” ; variable 


Le texte s'imprime alors, suivi d'un point d'interroga- 
tion. 


. Il est possible d'entrer plusieurs variables dans 
un même INPUT, avec la syntaxe suivante : 


numéro de ligne INPUT "texte" ; variable 1, variable 2 
Exemple : Imaginons un programme qui nécessiterait 

l'entrée d'une date (par exemple pour calculer le nombre 

de jours entre deux dates). Il pourrait comporter l'ins- 


truction suivante : 


numéro de ligne INPUT "ANNEE, MOIS, JOUR" ; 
A, M, J 


Notons les virgules entre les variables, et le point- 
virgule qui sépare le texte des variables. 


A l'exécution, on obtiendra : 
ANNEE, MOIS, JOUR ? 


Il faudra alors taper 3 nombres, séparés par une vir- 
gule : 


ANNEE, MOIS, JOUR ? 1789, 7, 14 
et ne pas oublier d'appuyer sur [RETURN], comme d'habi- 


tude. 


— 33 - 


. Que se passe-t-il si au lieu de taper trois nom- 
bres, nous n'en tapons que deux et appuyons sur [RETURN] 
en oubliant le troisième ? Eh bien, Oric va prendre en 
compte les deux valeurs, s'apercevoir qu'il lui en faut 
encore une, et afficher un double point d'interrogation 
pour signaler qu'il manque des données. 


ANNEE, MOIS, JOUR ? 1789, 14 [RETURN] 
27.7 


On peut donc rentrer les données groupées comme l'on 
veut car, tant qu'Oric n'aura pas le nombre de données 
nécessaire, il affichera ??. 

. Si au contraire nous tapons plus de données que né- 
cessaire, Oric ne prendra en compte que les n premières 
(s'il attend n données) et ignorera les suivantes (super- 
flues) en signalant le fait par le message EXTRA IGNORED. 


ANNEE, MOIS, JOUR ? 1789, 14, 7, 18, 2 
EXTRA IGNORED 


Si nous ne tapons aucune donnée et faisons directe- 
ment [RETURN], Oric, s'apercevant qu'aucune donnée n'a 
été tapée, nous demandera d'entrer une valeur, en affi- 
chant un point d'interrogation. 

ANNEE, MOIS, JOUR ? [RETURN] 
? 

Si nous refaisons [RETURN], nous aurons un nouveau ? 
jusqu'à ce que nous tapions un nombre. 

ATTENTION : Si nous faisons [RETURN] après un ??, 

Oric considérera que nous avons tapé 0. 

2.3.7 Instruction PRINT 
Pour imprimer une variable : 
PRINT B 


Pour imprimer un texte : 


PRINT “texte” 


— 34 — 


Pour imprimer une variable en précisant sa nature 
PRINT "texte", B 


On peut faire imprimer plusieurs variables par un mê- 
me ordre PRINT, mais on a deux possibilités : on peut sé- 
parer les variables soit par des virgules, soit par des 
points-virgules. Quelle est la différence ? 


Si l'on sépare deux variables par une virgule, la 
deuxième sera imprimée séparée de quatre blancs de la 
première variable. Si on utilise un point-virgule les 
deux variables seront imprimées côte à côte, séparées par 
un seul blanc. 


Essayons et tapons : 


B = 7 

C = 13 
PRINT B, C 
7 13 
PRINT B; C 
7 13 


Le principe est le même avec des chaînes de caractè- 
res ; la seule différence est que deux chaînes de carac- 
tères séparées par un point-virgule seront imprimées 
jointivement. 


Par exemple : 


PRINT "BON" ; "JOUR" 


donne 

BONJOUR 
mais 

PRINT "BON", "JOUR" 
donne 


BON JOUR 


De plus, il est possible de préciser le nombre de 
blancs entre deux chaînes de caractères. 


_— 35 - 


Si l'on veut par exemple que BON et JOUR soient sépa- 
rés par douze blancs, on écrira : 


PRINT "BON" SPC(12) "JOUR" 


I1 suffit donc d'intercaler SPC(N) entre deux chaînes 
de caractères pour qu'elles soient séparées par N blancs. 
N doit être un nombre compris entre 0 et 255. 


Pour en finir avec l'ordre PRINT, rappelons que l'on 
peut utiliser ? comm abréviation et signalons enfin que 
l'on peut terminer un ordre PRINT par un point-virgule, 
alors qu'il n'y a rien à séparer. Le prochain PRINT écri- 
ra alors sur la même ligne, comme le montre l'exemple 
suivant 


10 PRINT “BON"'; 
20 PRINT "JOUR" 
RUN 


donne BONJOUR 


Ready 


2.4 COMMANDES FONDAMENTALES 


Avant de découvrir d'autres programmes, de tailles 
plus importantes, il est indispensable d'aborder les dif- 
férentes commandes qui permettent la manipulation de ces 
programmes. 


Nous avons déjà vu la commande LIST, qui permet de 
"lister" un programme, et sur laquelle nous allons reve- 
nir. Mais un programme doit aussi pouvoir être corrigé, 
modifié ; on doit pouvoir en chercher les erreurs... etc. 
Nous verrons les commandes qui permettent tout cela. 


2.4.1 Connaître le contenu d'un programme : la commande 
LIST 
Cette commande, que nous avons déjà rencontrée, four- 
nit sur l'écran la copie du programme en mémoire, qu'on 
appelle la liste, ou en franglais le listing. 


+ 96.= 


Si le programme est très long et ne tient pas tout entier 
sur l'écran, le “listing” va défiler, une ligne dispa- 
raissant en haut de l'écran, une nouvelle apparaissant en 
bas. La vitesse de défilement étant assez rapide, la 
lecture est assez difficile. 


Aussi peut-on stopper le défilement en appuyant sur 
la barre d'espacement du clavier. Ensuite en appuyant sur 
n'importe quelle touche, le défilement reprend. Vous pou- 
vez essayer, mais les programmes que nous avons écrits 
jusqu'à maintenant sont un peu courts pour que cela se 
voie bien. 


En ‘“listant"” un programme, on constate que les ins- 
tructions apparaissent dans l'ordre des numéros crois- 
sants, c'est-à-dire dans le même ordre que pour l'exécu- 
tion, quel que soit l'ordre dans lequel elles ont été 
tapées. De plus, si en tapant nos instructions nous avons 
utilisé ? à la place de PRINT, sur le listing c'est le 
mot PRINT qui apparaît. 


Au lieu de lister un programme d'un seul coup, il est 
possible de n'en visualiser que certaines parties : 


Ainsi, pour lister une ligne x donnée, il suffit de 
préciser ce numéro après LIST. Exemple (nous supposons 
notre programme de calcul de circonférence toujours en 
mémoire) : 


LIST 20 
20 C=PI*D 


Pour lister toutes les instructions comprises entre 
deux numéros x et y, il suffit de taper LIST x-y : 


LIST 20-30 
20 C=PI*D 
30 PRINT "LA CIRCONFERENCE DU CERCLE EST ", C 


Si l'on avait tapé LIST 25-38 on aurait obtenu la même 
chose, car, dans notre exemple, il n'y a aucune ligne 


entre 25 et 20, ni 30 et 38. 


Pour lister toutes les lignes du début jusqu'à la li- 
gne x il faut taper LIST -x : 


AT 


LIST -20 
10 INPUT “QUEL EST LE DIAMETRE DU CERCLE"; D 
20 C= PI * D 


De la même façon LIST x- liste toutes les lignes de 
la ligne x jusqu'à la fin 


LIST 30- 
30 PRINT "LA CIRCONFERENCE DU CERCLE EST ", C 
4O GOTO 10 


Si l'on veut arrêter définitivement de lister un pro- 
gramme en train de défiler sur l'écran, il faut appuyer 
simultanément sur [CTRL] et [C], comme pour arrêter 
l'exécution d'un programme. Il apparaît alors 


BREAK 
Ready 
2.4.2 Pour effacer un programme : commande NEW 


Supposons qu'un programme soit en mémoire. Si nous 
tapons NEW en mode direct, tout le contenu de la mémoire 
sera effacé. Nous pouvons nous en assurer en utilisant la 
commande LIST : si après NEW nous tapons LIST, nous obte- 
nons simplement 


Ready 
preuve qu'aucun programme ne se trouve plus en mémoire. 


Il est conseillé d'utiliser la commande NEW avant de 
taper un nouveau programme, pour effacer l'ancien. 


En effet, imaginons que nous commencions à taper un 
nouveau programme sans avoir effacé l'ancien ; deux cho- 
ses peuvent alors se produire : soit le numéro de la 
ligne que nous tapons existait déjà dans l'ancien pro- 
gramme, auquel cas la ligne que nous tapons ira remplacer 
l'ancienne, qui sera par là même effacée, soit ce numéro 
n'était pas dans l'ancien programme. Dans ce cas la ligne 
ira s'intercaler à la place impliquée par son numéro. 


Nous comprenons donc que si les numéros des lignes 
que nous tapons ne correspondent pas un à un à ceux de 
l'ancien programme, il restera des instructions anciennes 


= 48e 


non effacées, qui perturberont l'exécution du programme. 
D'où l'intérêt de la commande NEW, qui supprime cet in- 
convénient. 


2.4.3 Pour lancer l'exécution d'un programme : 
commande RUN 


Nous avons déjà rencontré la commande RUN qui permet 
de lancer l'exécution d'un programme. Il est possible 
d'utiliser cette commande sous la forme RUN x où x est un 
numéro de ligne, le programme s'exécutant à partir de 
cette ligne numéro x. 


11 existe une autre façon d'obtenir le même résultat: 
on peut taper, en mode direct 


GOTO x 


et là aussi le programme commencera à partir de la ligne 
Xe 


Il y a pourtant une différence : avec RUN, toutes les 
variables sont automatiquement mises à zéro, ce qui n'est 
pas le cas avec GOTO. 


Exemples : tapons 


10 B = 45 
20 PRINT B 
Alors | RUN RUN 20 ( B }) B = 7 ( B ) 
( est ) GOTO 20 (reste) 
(mis à) ( à ) 
( 0 ) C7) 
donne| 45 donne |O donne |7 


Il est possible de remettre les variables à zéro en 
tapant CLEAR. 


Dans l'exemple précédent, 
B = 7 
CLEAR (B est mis à 0) 
GOTO 20 


donne 0 


= age 


2.4.4 Pour terminer un programme : instructions STOP et 
END 


Jusqu'à maintenant nos programmes (du moins ceux qui 
n'avaient pas de boucles indéfinies) se terminaient en 
arrivant à leur dernière ligne. 


Mais supposons que notre programme comporte plusieurs 
parties et que nous voulions lancer tantôt l'une tantôt 
l'autre, grâce par exemple à RUN x ; si nous lançons la 
première partie, rien ne signale à ORIC la fin de cette 
partie. Il va donc continuer en exécutant la deuxième 
partie. 


Pour éviter cela, il faut terminer chaque partie par 
STOP ou END. 


Ces deux instructions ont un effet sensiblement iden- 
tique : en arrivant sur END ou STOP, le programme se ter- 
mine et revient en mode direct. La seule différence est 
qu'avec END il s'affiche simplement 

Ready 


alors qu'avec STOP il s'affiche 
BREAK IN numéro de ligne 
Ready 


Le numéro est celui de la ligne où se trouve le STOP. 
S'il y a plusieurs STOP dans le programme, on peut ainsi 


, 


savoir où il s'est arrêté. 


Traditionnellement, l'instruction END est plutôt pla- 
cée à la toute dernière ligne de programme. Le END n'a 
pas plus de raison d'être à la fin qu'au début d'un pro- 
gramme. Cela dépend uniquement de la structure organique 
du programme. 


2.4.5 Corrections et modifications de programmes 
— INSERTION D'UNE LIGNE 


Si nous voulons insérer une instruction entre les li- 
gnes 50 et 60 par exemple, il suffit de taper 


55 instruction 


40 


L'instruction viendra s'insérer à la ligne 55, entre 
les lignes 50 et 60. Mais nous voyons que cela n'est pos- 
sible que parce que les numéros des lignes ne sont pas 
consécutifs. C'est pour cela qu'on a l'habitude (et c'est 
une bonne habitude à prendre !) de taper un programme en 
numérotant les lignes de 10 en 10 ; cela permet les in- 
sertions ultérieures. Naturellement, on pourrait aussi 
numéroter de 20 en 20 ou de 100 en 100, mais l'expérience 
montre que la numérotation de 10 en 10 est la plus prati- 
que. 


— SUPPRESSION D'UNE LIGNE 


Comme nous l'avons déjà vu, il suffit de taper son 
numéro, suivi de [RETURN]. 


- MODIFICATION COMPLETE D'UNE LIGNE 


Nous savons aussi que pour modifier complètement une 
ligne, il suffit de la retaper, précédée de son numéro. 
L'ancienne version est effacée et remplacée par la nou- 
velle. 


— MODIFICATION DE QUELQUES CARACTERES SUR UNE LIGNE 


Supposons qu'en faisant lister notre programme nous 
nous apercevions que nous avons fait une erreur dans une 
ligne, par exemple 


30 PRINT "LA CIRCONGERENCE DU CERCLE EST ", C 


Une première solution consiste à retaper entièrement 
la ligne, mais c'est fastidieux si la ligne est un peu 
longue. 


La bonne solution est la suivante : il faut d'abord 
faire lister la ligne défectueuse sur l'écran, par exem- 
ple ici par 


LIST 30 
BH 30 PRINT "LA CIRCONGERENCE DU CERCLE EST ", C 


11 faut ensuite amener le curseur au début de la li- 


gne comme indiqué ci-dessus, grâce aux touches de mouve- 
ment du curseur : 


[æ] [41 LŸ1 [—+] 


_- 41 — 


On appuie simultanément sur [CTRL] [A]. Le curseur 
avance alors vers la droite ; on l'amène ainsi jusqu'au 
caractère erroné, ici le G : 


30 PRINT "LA CIRCONSERENCE DU CERCLE EST ", C 


(Pour cela on maintient la touche [CTRL] enfoncée et 
l'on appuie sur [A] autant de fois que nécessaire pour 
placer le curseur). 


On tape alors un F, puis on réappuie sur [CTRL] [A] 
pour faire parcourir au curseur le reste de la ligne 


30 PRINT "LA CIRCONFERENCE DU CERCLE EST ", C8 


On appuie ensuite sur [RETURN] : la modification est 
alors prise en compte. 


ATTENTION : L'effet de la touche [CTRL] [A] est 
de placer dans une petite mémoire intermédiaire les 
caractères rencontrés sur l'écran par le curseur. Si 
nous avions fait [RETURN] après avoir tapé le F, les 
caractères suivants n'auraient pas été pris en com- 
pte. En faisant 


LIST 30 
nous aurions obtenu 
30 PRINT "LA CIRCONF 


S'il y a plusieurs caractères erronés sur la même li- 
gne, il suffit de les corriger de la même façon, au 


fur et à mesure que le curseur se positionne sur ces 
caractères. 


2.5 CREEZ VOTRE JEU EN BASIC 

2.5.1 Présentation du jeu 

Jusqu'à maintenant nous avons vu quelques instruc- 
tions fondamentales du BASIC, et les commandes indispen- 
sables à l'élaboration des programmes. Néanmoins, nous ne 


sommes pas capables d'écrire des programmes très élabo- 
rés, car notre vocabulaire BASIC est encore assez limité. 


SAT 


Dans cette partie nous allons découvrir les instruc- 
tions BASIC supplémentaires qui, avec celles que nous 
connaissons déjà, forment véritablement les bases de la 
programmation. Pour cela, nous allons programmer un jeu 
qui nous permettra d'introduire de manière plus attrayan- 
te de nouvelles instructions BASIC. 


Au départ, notre jeu sera bien sûr un peu simple, 
mais nous l'améliorerons progressivement. A quoi allons- 
nous donc jouer ? Eh bien, nous allons essayer de pro- 
grammer le jeu de la “roulette russe"... ou tout au mins 
sa simulation. 


Rappelons le principe de ce jeu (si dangereux dans la 
réalité) : un revolver à six coups contient une seule 
cartouche ; on fait tourner le barillet au hasard une 
fois, puis chacun des joueurs à tour de rôle braque l'ar- 
me contre sa tempe et appuie sur la détente, jusqu'à ce 
que l'un d'eux renonce, auquel cas il a perdu, ou jusqu'à 
ce que le coup parte... 


Pour simuler le coup de feu, nous pourrons par exem- 
ple faire écrire BANG. Pour repérer la balle dans le 
barillet, nous pourrons utiliser une variable qu'on ap- 
pellera par exemple BALLE, et qui vaudra un nombre de 1 à 
6. On affichera alors BANG au premier coup si BALLE vaut 
1 (c'est-à-dire si la balle est dans le premier logement 
du barillet}), au deuxième coup si BALLE = 2, au troisième 
si BALLE = 3, etc... Il nous faudra donc compter les 
coups ; pour cela nous introduirons une variable COUP qui 
vaudra 1 au premier coup et que nous augmenterons de 1 à 
chaque coup. 


Mais il faudra aussi que nous puissions tester si 
BALLE = COUP ; il existe pour cela une instruction BASIC, 
l'instruction IF, que nous allons détailler : 

2.5.2 Instruction IF 


Sa forme générale est la suivante : 


IF condition THEN instruction l ELSE instruction 2 


AY 


Si la condition est vraie (IF signifie SI), on 
exécute l'instruction 1 qui suit le THEN (THEN signi- 
fie ALORS). Si la condition est fausse on effectuera 
l'instruction 2 qui suit ELSE (ELSE veut dire SINON). 


Puis on passe à la ligne suivante du programme. 


Précisons que l'instruction ELSE n'est pas obliga- 
toire ; on peut écrire simplement : 


IF condition THEN instruction 1 


Si la condition est fausse, on passe à la ligne sui- 
vante, sans effectuer l'instruction 1. 


Exemple 


50 IF A = B THEN PRINT "A EGALE B" ELSE PRINT 
"A EST DIFFERENT DE B" 


La condition qui est testée ici est À = B. La machine 
compare les valeurs de A et B ; si ces deux valeurs sont 
égales, l'instruction qui suit THEN est effectuée : Oric 
écrit A EGALE B. Sinon, il effectue l'instruction 2, 
c'est-à-dire qu'il écrit A EST DIFFERENT DE B. 

Lorsque l'instruction qui suit THEN est GOTO, la syn- 
taxe est susceptible de se simplifier : on peut toujours 
écrire : 

70 IF À > B THEN GOTO 110 
mais aussi simplifier par 

70 IF A> B THEN 110 
ou encore 

70 IF A> B GOTO 110 

On comprend aisément la signification de cet exemple. 
Si la valeur de À est supérieure à la valeur de B, on va 


à la ligne 110, sinon on passe à la ligne 80, suivante. 


L'instruction IF est peut-être la plus importante des 


Es 


instructions BASIC ; aussi, avant de poursuivre, exami-— 
nons en détail les types de condition qui peuvent suivre 
le IF. 


— Un premier type de condition est de la forme : 


Expression Opérateur de Expression 
arithmétique comparaison arithmétique 
Exemples : 
À = B 
A > B 
3 * A -2 > 4x B T2 
Expression Opérateur de Expression 
arithmétique comparaison arithmétique 


Les opérateurs de comparaison sont les suivants 


égal 

supérieur 
inférieur 
différent 
supérieur ou égal 
inférieur ou égal 


SNMRA NY 
v 


ll 


— Un deuxième type de condition combine des condi- 
tions du premier type à l'aide des trois opérateurs logi- 
ques suivants 


AND : et 
OR : où 
NOT : non 


La syntaxe est la suivante (condition A et condition 
B sont des conditions du premier type) : 


condition A AND condition B 


est vrai si, et seulement si, condition À et 
condition B sont vraies toutes les deux. 


= 45 — 


condition À OR condition B 


est vraie si l'une au moins des deux condi- 
tions À ou B est vraie (elles peuvent aussi, 
naturellement, être vraies toutes les deux). 


NOT condition A 


est vraie si condition À est fausse et 
fausse si condition À est vraie. 


Exemple 
70 IF 2 * A> 4&+3TC OR B< 8 THEN 30 


Cette instruction enverra à la ligne 30 si 2 * A est 
strictement supérieur à 4+31C ou si B est strictement 
plus petit que 8. Si aucune de ces deux conditions n'est 


vérifiée, on passera à la ligne suivante. 


Nous avons dit que IF est une des plus importantes 
instruction BASIC. En effet, c'est elle qui permet à Oric 
de prendre des décisions, c'est-à-dire d'exécuter une 
instruction plutôt qu'une autre, en fonction des diffé- 
rentes situations résultant des données ou des calculs. 


Nous sommes donc, maintenant, en mesure de taper une 
première version de notre jeu. 


2.5.3 Première version du jeu 


10 CLS 

20 BALLE = 4 

30 COUP = 1 

4O PRINT "CLIC..." 

50 IF COUP = BALLE THEN PRINT "BANG" ELSE 
PRINT "SAUVE !" 

60 INPUT "TAPEZ 1 POUR TIRER O POUR 
ABANDONNER"; REP 

70 IF REP = O THEN END 

80 COUP = COUP + 1 

90 GOTO 40 


Nous découvrons à la ligne 10 une nouvelle instruc- 
tion, l'instruction CLS. Elle a simplement pour but de 


nettoyer l'écran de tout le texte qui peut s'y trouver et 


46. = 


de ramener le curseur en haut à gauche de l'écran. On 
peut aussi la taper en mode direct, mais il est alors 
plus simple de taper [CTRL] [L] qui a le même effet. 


La suite du programme se comprend aisémnt ; au dé- 
part COUP = 1 : c'est le premier coup ! On affiche 
CLIC... pour suggérer que l'on commence à appuyer sur la 
détente. Puis, grâce à l'instruction IF, on teste si la 
balle est dans le logement du barillet face au canon, 
c'est-à-dire pour nous si BALLE = COUP. Si c'est le cas 
on imprime BANG : le coup est parti ; sinon on imprime 
SAUVE ! 


On demande ensuite si l'on veut tirer à nouveau. Si 
l'on tape 0 le jeu s'arrête, si l'on tape 1 (en fait tout 
nombre autre que 0), le jeu continue : on va tirer une 
nouvelle fois et donc passer au coup suivant. Pour cela 
on augmente COUP de 1, à la ligne 80. Cette instruction 
ne doit pas surprendre. En mathématique, bien sûr, elle 
serait fausse, mais ici elle signale simplement que l'on 
ajoute 1 à la variable COUP, puis que cette nouvelle va- 
leur est affectée à la même variable COUP. 


Ensuite, on repart à la ligne 40 où l'on recommence à 
"tirer". 


Une première objection vient tout de suite à l'es- 
prit. À la ligne 20 il y a BALLE = 4. Nous savons donc où 


se trouve la balle : dans le quatrième logement du ba- 
rillet. Le jeu serait satisfaisant pour quelqu'un qui 
n'aurait pas écrit le programme et qui ignorerait donc 
combien vaut BALLE. Mais il est toujours possible de le 
découvrir en listant le programme. 


11 existe un moyen d'éviter cet inconvénient : faire 
tirer un nombre au hasard par l'ordinateur lui-même. 
2.5.4 Fonction RND 


Cela est possible grâce à la fonction RND (abrévia- 
tion du mot anglais RANDOM, qui signifie hasard). 


Si nous tapons : 


PRINT RND(1) 


DAT 


nous obtenons un nombre aléatoire compris entre 0 et 1. 


Cela peut surprendre : comment un ordinateur dont le 
comportement est parfaitement déterminé, peut-il donner 
des nombres au hasard ? 


En fait ces nombres ne sont pas vraiment tirés au ha- 
sard. Ils sont calculés par des algorithmes précis, mais 
qui, paradoxalement, donnent des suites de nombres, dits 
pseudo-aléatoires, et qui sont tels que, statistiquement, 
tout se passe comm s'ils avaient été tirés au hasard. 


Un appel à RND est de la forme RND (X) avec X> O : 
on obtient alors un nombre entre 0 et 1. Des appels suc- 
cessifs avec la même valeur de X donnent les éléments 
successifs d'une même suite pseudo-aléatoire (le nombre 
obtenu changeant à chaque fois). En changeant la valeur 
de X on change de suite, mais généralement on utilise RND 


(1). 


2.5.5 Fonction INT 


Néanmoins notre problème n'est pas encore résolu, car 
nous voulons un nombre entier entre 1 et 6. Pour cela, 
nous allons utiliser la fonction INT qui donne la valeur 
entière immédiatement inférieure. 


Ainsi : 
PRINT INT (3.1416) 
donne 3 
PRINT INT (127.4387) 
donne 127 


Attention : pour les nombres négatifs, on obtient 


INT (-3.1416) = -4 
INT (-127.4387) = -128 


Comme nous voulons un nombre entier de 1 à 6, nous 
taperons 


s. 48. = 


20 BALLE = INT (6 * RND(1)) + 1 


RND(1) est compris entre 0 et 1, O et 1 exclus, donc 
6 * RND(1) est compris entre 0 et 6, O et 6 exclus, d'où 
INT (6 * RND(1)) est compris entre 0 et 5, O0 et 5 inclus. 
En ajoutant 1, on a bien un nombre entier de 1 à 6. 


Notre programme n'est pas encore parfaitement satis- 
faisant, car une fois que le coup est parti, c'est-à-dire 
qu'on a imprimé BANG, il demande encore si l'on veut ti- 
rer, alors que, normalement, le jeu est terminé. 


Pour éviter cet inconvénient nous pourrions, bien 
sûr, mettre à la place de PRINT "BANG" un GOTO vers une 
instruction faisant imprimer BANG, suivie de l'instruc- 
tion END. Mais il existe une meilleure façon de faire 
l'utilisation de l'instruction REPEAT ... UNTIL. 


2.5.6 REPEAT ... UNTIL 
Cette instruction s'emploie de la façon suivante : 


REPEAT 


instructions 


UNTIL condition 


REPEAT signifie “répéter”, UNTIL signifie 
“jusqu'à ce que". Toutes les lignes d'instructions com- 
prises entre REPEAT et UNTIL sont répétées, c'est-à-dire 
réexécutées jusqu'à ce que la condition suivant UNTIL 
soit vraie. Cette condition est du même type que celles 
qui peuvent suivre un IF que nous avons déjà vu. 


Cette structure pourrait être remplacée par IF NOT 
condition GOTO x à la place de UNTIL, x étant le numéro 
de la première ligne des instructions à répéter, mais le 
programme serait beaucoup moins clair à lire et à com- 
prendre. Aussi l'instruction REPEAT ... UNTIL est-elle à 
utiliser partout où c'est possible. 


— 49 — 


2.5.7 Seconde version du jeu 


Nous allons donc pouvoir modifier notre programme de 
la façon suivante : 


10 CLS 

20 BALLE = INT (6 * RND(1)) + 1 
30 REPEAT 

4&O WAIT 100 


50 INPUT "TAPEZ 1 POUR TIRER O POUR 
ABANDONNER"; REP 

60 IF REP = O THEN END 

70 PRINT "CLIC..." 

80 WAIT 200 

85 COUP = COUP + 1 

90 IF BALLE <> COUP THEN PRINT "SAUVE !" 

100 UNTIL BALLE = COUP 

110 PRINT "BANG" 

120 EXPLODE 

130 END 


Nous avons aussi ajouté deux instructions nouvelles, 
l'instruction WAIT et l'instruction EXPLODE. 


2.5.8 L'instruction WAIT 


En anglais, WAIT signifie ATTENDRE ; WAIT 100 au- 
ra pour effet d'arrêter l'exécution pendant 100 fois 10 
millisecondes, soit 1 seconde, WAIT 200 pendant 200 fois 
10 millisecondes, soit 2 secondes... ; de manière généra- 
le, une ligne d'instruction WAIT N provoquera un arrêt de 
l'exécution de N fois 10 millisecondes. 


Nous avons ajouté cette instruction pour laisser un 
intervalle de temps entre 2 impressions sur l'écran, et 
aussi pour ajouter au suspense, par l'attente du BANG ou 
du SAUVE ! après le CLIC... ! 


2.5.9 L'instruction EXPLODE 

Cette instruction provoque un bruit d'explosion, qui 
donne beaucoup plus d'effet au jeu. Vous pouvez essayer 
de la taper en mode direct. 


Il existe d'autres instructions provoquant des bruits 


- 50 -— 


divers, tels SHOOT, ZAP, PING ; ces instructions sont 
vues plus en détail dans le chapitre réservé aux possibi- 
lités sonores d'Oric. 


Avant de conclure, nous allons présenter une instruc- 
tion assez semblable à REPEAT ... UNTIL, et elle aussi 
très fondamentale : la boucle FOR ... NEXT. 


2.5.10 Boucle FOR ... NEXT 


REPEAT ... UNTIL nous permet de répéter une action 
jusqu'à ce qu'une condition soit vérifiée, mais, a prio- 
ri, nous ne savons pas combien de fois les instructions 
seront répétées. 


Aussi, pour pouvoir répéter une suite d'instruction N 
fois, il existe l'instruction FOR ... NEXT, qui s'emploie 
de la façon suivante 


FOR I = 1 TO N 


instructions 


NEXT I 


Son fonctionnement est le suivant : au départ I = 1, 
et les instructions sont exécutées. On arrive à l'ins- 
truction NEXT I (qui signifie I suivant), où l'on doit 
tester si I est égal ou non à N. Si IL est plus petit que 
N, I est augmenté de 1 et l'on réexécute les instruc- 
tions, puis l'on compare à nouveau I et N. 


Les instructions sont ainsi répétées jusqu'à ce que I 
= N, auquel cas on passe à la ligne suivant le NEXT. 


Cette instruction FOR ... NEXT sera revue et complé- 
tée dans le chapitre suivant, aussi contentons-nous de 
donner ici un exemple simple : faire imprimer les nombres 
de 1 à 1000. 


10 FOR I = 1 TO 1000 


20 PRINT I 
30 NEXT I 


- 51 - 


REMARQUE : Le nom de la variable, qui ici est I, 
peut bien sûr être différent. 


2.6 CONCLUSION 


Nous avons pu, dans ce chapitre, découvrir un premier 
jeu sur Oric, jeu assez simple, mais qui nous laisse en- 
trevoir que les possibilités n'ont de limites que celles 
de notre imagination. 


Parvenus à la fin de ce livre, vous serez capables 
d'écrire vous-même vos programmes de jeux. Dans cette 
perspective, le chapitre suivant va nous permettre d'ap- 
profondir encore notre connaissance du BASIC, en récapi- 
tulant les instructions que nous avons déjà vues et en 
nous en présentant de nouvelles. 


— 52 


CHAPITRE 3 


Le langage 


Basic 
de l'oric 





3.1 GENERALITES 


L'objet de ce chapitre est de développer et de pré- 
ciser les notions dont vous avez eu un aperçu au chapitre 
précédent. 


Nous allons examiner successivement les instructions 
constituant le langage évolué, compréhensible par votre 
microordinateur, qui vous permettront de réaliser tous 
vos programmes. 


— LE SYSTEME DE CARACTERES EMPLOYE : 


Le but d'un programme est, en général, de calculer 
des “valeurs”. En fait, un ordinateur ne “connaît” ces 
valeurs que sous forme de représentations. Celles-ci 
sont, comme nous l'avons vu au chapitre précédent, des 
configurations physiques constituées de bits, d'octets, 


de "paquets" d'octets. 
Pour représenter les caractères qu'il comprend, votre 


Oric utilise le code de représentation ASCII (initiales 
d'American Standard Code of Information Interchange). 


_- 53 — 


Vous trouverez la liste des caractères et leur code ASCII 
correspondant dans l'annexe F. 


Vous pouvez noter que votre ordinateur utilise 1 oc- 


tet (8 bits) pour représenter chaque caractère. Le mode 
de représentation est globalement le suivant : 


les valeurs 


0 à 31 caractérisent les caractères de con- 
trôle (CTRL T ... CTRL N etc...) 


32 à 127 caractérisent les caractères alphanumé- 
riques et les caractères spéciaux du 
code ASCII. 

128 à 255 caractérisent les mots constituant le 
vocabulaire BASIC compréhensible par 
votre Oric. 


— LES CARACTERES ALPHANUMERIQUES SONT : 


. caractères alphabétiques : 
A, B, ..., Z (alphabet majuscule) 


D] # 
. caractères numériques : 
0, 1, ..., 9 


— LES CARACTERES SPECIAUX SONT : 
PR TC) EST blanc SL OH La, D 0) 4e, 2 
(alphabet minuscule) etc... 
3.2 CONSTANTES -— VARIABLES - INDICES 
3.2.1 Les constantes 

Votre microordinateur distingue deux grands types de 
constantes : les constantes numériques et les constantes 
alphanumériques (ou chaînes de caractères). 
— LES CONSTANTES NUMERIQUES 


Celles-ci sont des nombres décimaux, de signe quel- 
conque, qui peuvent s'écrire de trois façons distinctes : 


_- 54 — 


. une série de chiffres sans point décimal (nombre 
entier). 


exemple : PRINT 7653 


. une série de chiffres avec point décimal (nombre réel 
dit en virgule fixe). 


exemple : PRINT 76.535 


. un entier ou un réel en virgule fixe suivi de la lettre 
E, d'un signe - éventuellement - et d'un entier (nombre 


réel dit en virgule flottante). 
exemple : PRINT 76.535 E+23 


Le symbole E s'énonce “dix puissance, et signifie ci- 
dessus que 76.535 est multiplié par 10 3 soit 


10:50 
23 zeros 


Toutes ces constantes sont considérées par votre Oric 
comme des nombres réels. La représentation de ces réels 
s'effectue dans la machine à l'aide de 5 octets. 


1 octet est utilisé par l'exposant 
(dans l'exemple précédent +24) 


& octets sont utilisés pour la mantisse 
(dans l'exemple précédent 7.653500) 


Vous trouverez des renseignements complémentaires sur 
la représentation interne des réels en annexe E. 


Ce type de représentation, ,vous imposera de, limiter 
vos réels entre -1.70141 10 bo 1.70141 10 ; 16 


réels compris entre -2.93874 10 et +2.93274 10 
sont assimilés à O. 


3811 est à noter qu'une constante -gupérieure à 1.70141 
10 ou inférieure à -1.70141 10 provoque l'appa- 
rition du message d'erreur ? OVERFLOW ERROR (dépassement 
de capacité de la machine). De même l'écriture d'une 
constante dont la mantisse possède plus de 38 chiffres 
entraîne l'affichage du même message d'erreur. 


- 55 — 


Considérons maintenant 


PRINT 11.123456789012345 [RETURN] 
11.123456789 


Observez qu'Oric n'édite que 9 chiffres après le 
point décimal, ceci s'appelle une troncature. 


En outre, compte tenu de la représentation interne 
des réels, la machine a une précision de l'ordre de 9 
chiffres sur la mantisse. 


Pour nous convaincre, réalisons le programme suivant. 


5 INPUT"A";A 

10 INPUT"B";E 

15 C=(A=B) 

20 PRINT"'A=";A,"B=";B 

25 IF C=0 THEN PRINT  “ORIC  CONSIDERE 
QUE";A; "EST DIFFERENT DE";B 

30 IF C=-1 THEN PRINT  “ORIC  CONSIDERE 
QUE";A; "EST EGAL A'";B 

35 END 


Vous pouvez prendre, par exemple, dans un premier 
temps 


A=1.123456789 et B=1.123456790 
puis A=1.1234567890 et B=1.1234567891 


Il est important que vous gardiez en mémoire que la 
précision de calcul de votre Oric est de 9 chiffres après 
la virgule sur la mantisse. 


La conclusion que l'on peut tirer de cet exemple est 
que si la machine accepte des mantisses de 38 chiffres, 
seuls les dix premiers sont significatifs. Donc, lors de 
l'entrée des données, il est inutile de taper des mantis- 
ses de plus de 9 chiffres. 


Oric admet aussi une écriture des constantes 
entières en numération en base 16 (numération hexadé- 


cimale). 


exemple : #10, # -E100 


— 56 - 


C'est le symbole # qui indique à la machine que 
les caractères qui suivent figurent un nombre hexa- 
décimal. (Ce nombre doit évidemment être écrit à 
l'aide de chiffres hexadécimaux). 


Ainsi : 5 A =Ë#G 

10 PRINT A 

RUN 
provoque l'affichage du message d'erreur ? SYNTAX 
ERROR IN 5 (G n'est pas un chiffre hexadécimal). 


Vous trouverez des renseignements complémentaires 
sur la numération hexadécimale en annexe E. 


Si vous tapez par exemple, PRINT # 1EFA [RETURN], 
vous noterez qu'Oric écrira directement ce nombre en 
base décimale. La conversion inverse, c'est-à-dire 
l'expression en base hexadécimale d'un nombre déci- 
mal, s'effectue à l'aide de la fonction HEXS. 


Exemple : PRINT HEXS$(16) 


Notez que la conversion de la base 16 à la base 
10 est limitée à des entiers variant entre - HFFFF et 
+ AFFFF (-65535 et +65535). 


Ainsi PRINT # 10000 provoque l'affichage du mes- 
sage OVERFLOW ERROR. 


— LES CONSTANTES ALPHANUMERIQUES 


Celles-ci sont constituées d'une suite de n caractè- 
res du code ASCII, situés entre cotes “doubles”. 


Exemple : PRINT “je m'appelle Oric” 


Notez que la double cote servant à délimiter une 
chaîne de caractères ne peut pas être un caractère appar- 
tenant à cette chaîne. 


Si la chaîne de caractères est la dernière donnée 
écrite sur une ligne, en mode direct ou différé, la dou- 
ble cote “ finale peut être oubliée sans inconvénient, 
puisque l'action sur la touche [RETURN] s'y substitue. 
Toutefois l'emploi de cette solution pour écrire une 


chaîne de caractères n'est pas à conseiller. 


— 57 - 


La longueur minimale d'une constante alphanumérique 
est zéro (chaîne vide) ; sa longueur maximale est de 255 
caractères. 


La représentation interne d'une chaîne s'effectue par 
le codage de chaque caractère, un à un, par le code ASCII 
donc elle nécessite un octet par caractère de chaîne. 


3.2.2 Les variables simples 


Une variable est une entité mathématique à laquelle 
on peut affecter diverses valeurs "variables". Pour défi- 
nir une variable, il suffit de lui donner un nom. 


Ce nom doit entrer dans une syntaxe bien précise à 
laquelle vous devez vous conformer strictement. 


. Le nom de la variable doit commencer par un carac- 
tère alphabétique (A, B, ..., Z) et peut être suivi par 
des caractères alphanumériques (A, ..., Z, 0, ..., 9). 
Les caractères $ et % peuvent aussi être utilisés, mais 
ils ont un rôle précis : ils caractérisent le type de la 
variable (variable alphanumérique ou entière). Ces deux 
caractères se placent toujours à la fin du nom de la 
variable. 


. Le nom d'une variable doit comprendre au maximum 
238 caractères. En fait, l'interpréteur basic de votre 
Oric représente chaque variable par les deux premiers 
caractères de son nom, et par son type. Ainsi, les deux 
variables POIRE et POIDS sont considérées comme identi- 
ques pour la machine. 


Toutefois, ce n'est pas une raison pour que vous 
limitiez, dans vos programmes, les noms de vos variables 
à 2 caractères. En effet, il est intéressant, pour amé- 
liorer la lisibilité de vos programmes, de prendre comme 
nom de variable le nom du résultat du calcul qu'on lui 
affecte, ou bien le nom de ce que la variable représente. 


Expliquons ceci plus clairement sur un exemple 
simple. 


Construisons un programme calculant l'aire d'un cer- 
cle connaissant son rayon. 


_- 58 — 


5 REM CALCUL DE L'AIRE D'UN CERCLE 
CONNAISSANT SON RAYON 
10 INPUT "QUEL EST LE RAYON DU CERCLE"; RAYO 
15 AIRE = PI * RAYO * RAYO 
20 PRINT "L'AIRE DU CERCLE DE RAYON ” ; RAYO 
3; "VAUT" ; AIRE 
25 END 


Ainsi la variable qui représente le rayon du cercle 
s'appelle RAYO, et celle à laquelle on affecte le calcul 
de la surface du cercle s'appelle AIRE. 


Notez que PI est une constante stockée par Oric ; 
cette constante vaut 3.14159265. 


. En dernier lieu le nom d'une variable ne doit, en 
aucun cas, contenir de mot appartenant au vocabulaire 
basic de la machine (la liste de ces mots “réservés” 
figure dans l'annexe A). 


Ainsi, des noms de variable aussi anodins que PRUNE, 
VALEUR, FORCE, LETTRE, NEUTRON, etc ne doivent pas être 
employés. 


L'emploi d'un mot réservé dans un nom de variable 
provoque généralement l'apparition du message d'erreur 
SYNTAX ERROR. Sinon l'interpréteur exécutera sans réac- 
tion immédiate le mot réservé, ce qui aura des conséquen- 
ces aussi imprévisibles que variées. 


Vous pouvez utiliser trois types de variables dans 
vos programmes : les variables alphanumériques, entières, 


ou réelles. 


— LES VARIABLES ALPHANUMERIQUES OÙ CHAINES DE 
CARACTERES 


Une variable est alphanumérique si le dernier carac- 
tère de son nom est le symbole $. Le “contenu” d'une 
telle variable doit obligatoirement être une constante 
alphanumérique. 


Exemple : AAS$= "A=l + BCDXY 56" 
Si vous essayez AA$=1234567890, l'interpréteur basic 
vous signalera l'erreur par le message TYPE MISMATCH 


ERROR (les cotes sont fondamentales puisque ce sont elles 


_- 59 - 


qui indiquent que la constante est une chaîne de carac- 
tères). 


Il est à noter que la représentation interne de 
cette variable AA$S s'effectue de la façon suivante : 
Oric stocke dans cet ordre 


. le nom de la variable (AA$), ce qui occupe 2 
octets (les deux premiers caractères du nom sont 
seuls concernés, le symbole $ est pris en compte dans 
la manière de stocker la variable) ; 


. la longueur de la chaîne de caractères, ce qui 
occupe L octet (ceci vous explique pourquoi une chaî- 
ne comprend au plus 255 caratères 255 = 2°-1) ; 


+ l'adresse de la zone où est stockée la chaîne 
de caractères, ce qui occupe 2 octets ; 


. deux octets “"séparateurs". 


Donc finalement, une variable alphanumérique 
occupe 7 octets + le nombre d'octets correspondant au 
nombre de caractères composant la chaîne. En conclu- 
sion, vous devez retenir que l'emploi de variables 
alphanumériques est coûteux en place mémoire. 


— LES VARIABLES ENTIERES 


Une variable est entière si le dernier caractère du 
nom de celle-ci est le symbole %. Le “contenu” d'une 
telle variable doit obligatoirement être une constante 
non alphanumérique. 


Exemple : 5 CA%=123 
10 PRINT CAZ 
RUN 


Remarquez que CA% est un nombre entier (absence de 
point décimal). 


A présent, modifiez la ligne 5 
5 CA%=1535.428 
RUN 


— 60 -— 


Avec cet exemple vous pouvez voir que lorsque l'on 
affecte à CA% une valeur réelle, la machine stocke en 
fait le plus grand nombre entier inférieur à la valeur 
réelle que vous avez affectée à CA%. (D'un point de vue 
mathématique, Oric prend la partie entière de ce nombre 


réel). 


Afin d'améliorer la lisibilité de vos programmes 
futurs, il est souhaitable que, dès à présent, vous 
preniez l'habitude d'affecter à une variable entière une 
constante mathématiquement de même type. 


Ainsi, plutôt que de taper : CA%=13.22, 

il est préférable d'utiliser : CA%=INT(13.22) 

(la fonction INT est la fonction partie entière, ces deux 
lignes sont donc équivalentes). 


REMARQUE : CA%=#FAB est bien entendu licite puis- 
que #FAB est un entier en numération hexadécimale. 
Notez que PRINT CA% écrit CA% en numération décimale 
(en base 10). 

Si vous essayez CA%="123", l'interpréteur basic vous 
signalera l'erreur par le message TYPE MISMATCH 
ERROR, puisque la présence de ” “ signifie que vous 
affectez à CA% une constante alphanumérique. 


La représentation interne de la variable CA% 
s'effectue de la façon suivante. 


Oric stocke dans cet ordre : 


. le nom de la variable (CA%) ce qui occupe 2 
octets (les 2 premiers caractères du nom sont seuls 
conservés, le symbole % est pris en compte dans la 
façon de stocker la variable) ; 

. la valeur affectée à la variable, ce qui occupe 
2 octets. 


Donc, le stockage d'une variable entière n'occupe 
que 4 octets. Etant donné que la valeur de la varia- 
ble est stockée sur 2 octets seulement, vous ne pour- 
rez utiliser que les entiers compris entre -32768 et 
+32767. 


Vous trouverez des renseignements complémentaires 
sur la représentation des entiers en annexe. 


=ÉL'= 


— LES VARIABLES REELLES 


C'est l'option par défaut que prend la machine lors- 
que le nom de la variable ne possède comme dernier carac- 
tère ni $, ni %. Le contenu de cette variable doit être 
une constante non alphanumérique. 


Exemple : DA=1.23 E23 
DA=3452.34. 


La représentation interne de la variable réelle 
DA s'effectue de la façon suivante 


Oric stocke dans cette ordre 


le nom de la variable, ce qui occupe 2 octets 
(les 2 premiers caractères du nom sont seuls conser- 
vés) ; 


. la valeur affectée à la variable, ce qui, vous 
l'avez vu au paragraphe précédent, nécessite 5 oc- 
tets. 


Le stockage d'une variable réelle n'occupe donc 
que 7 octets. 


Pour mémoire, les réels, que vous devez ypiliser sont 
compris entre -1.70141 10 et 1./70141 10 . Bien en- 
tendu, l'écriture d'une ligne du type CA="123" entraîne 
l'affichage du message suivant : TYPE MISMATCH ERROR. 


En conclusion, vous pouvez remarquer que suivant le 
type de variable que vous considérez, telle ou telle 
représentation physique sera adoptée par la machine. 
C'est pourquoi les variables A, A$ et A%, de noms pour- 
tant peu différents sont, en fait, fondamentalement 
distinctes. 


Il est donc capital de préciser à la machine, au mo- 
ment de la programmation, le type de chaque variable que 
vous voudrez utiliser. Cette gymnastique se révèlera 
profitable à la longue, car elle vous conduira à définir 
tous les “objets” que vous voudrez employer et, donc, à 
mieux les contrôler. 


A présent, étudiez le petit exercice suivant 


— 62 — 


Une personne de vos amis peut effectuer ses achats 
dans 5 magasins différents. Mais elle veut connaître 
celui qui est, en moyenne, le meilleur marché. Pour ce 
faire, elle se constitue un panier de référence de 26 
articles tests tous disponibles dans chaque magasin et 
regarde le prix de chaque “panier de la ménagère". 


En outre, inquiète de l'évolution des prix, elle veut 
faire des essais tous les mois. Elle sait que vous possé- 
dez un ordinateur et elle fait appel à vous pour élaborer 
un programme permettant d'effectuer chaque mois les cal- 
culs nécessaires à la réalisation de son enquête. 


Soucieux d'utiliser les conseils prodigués précédem- 
ment, vous définissez logiquement les variables qui vont 
contenir les prix de chaque objet de chaque magasin. Vous 
appelez les objets A, B, ..., Z (26 objets) et les 
magasins 1, ..., 5 (5 magasins), les noms des variables 
prix seront constitués du nom de l'objet auquel elles se 
rapportent et du nom du magasin où a été acheté l'objet, 
elles auront donc pour nom Al, Bl, ..., Zl, A2..., 22, 
ses 25e 


Les prix de chaque panier seront les variables AA, 
BB, ..., EE (il faut se garder de donner le même nom à 
deux variables différentes) ; par exemple le prix du 
panier 3 sera CC = A3 + B3 + ... + 73. 

Mais avant de faire ce calcul, il faut affecter à 
chaque objet son prix dans chaque magasin (cette opé- 
ration porte le nom générique de “saisie de données"). 


Votre programme débute par : 


5 REM CALCUL DU MAGASIN LE MEILLEUR MARCHE 

10 INPUT “PRIX DE L'ARTICLE 1 DU MAGASIN 
l";Al 

15 INPUT “PRIX DE L'ARTICLE 2 DU MAGASIN 
1”;BL 


Vous vous rendez compte à ce moment que vous allez 
taper cette ligne pour chaque article de chaque magasin, 
soit 130 fois, ce qui est extrêmement fastidieux. Or 
chaque variable Al, Bl, ... Z5 a les mêmes propriétés. 


En fait, votre Oric permet de résoudre et d'écrire 
beaucoup plus élégamment ce genre de problèmes constitués 


= 63 = 


de travaux, comme ici, très répétitifs, c'est-à-dire la 
construction de variables de mêmes caractéristiques et 
leur emploi dans les calculs. 


Dans le paragraphe suivant, nous allons justement 
voir comment construire simplement un groupe de variables 
de mêmes propriétés. 

3.2.3 Les variables indicées ou tableaux 

Votre ami étant une personne organisée, vous a en 
fait remis le document suivant pour vous faciliter la 
saisie des données. 


Tableau des prix des articles dans chaque magasin. 


(Tableau 1) 


; article : À : B : sl : Z 

: magasin : : : : : : 
He de Mae Hs +4 
O2  iMiBi Ji +2 
cs iBiBi IH: 12: 
A | Éd de he 
D édite, dan di. 


Votre Oric est pratiquemment capable de construire 
et d'utiliser un tel document. D'un point de vue informa- 
tique ce document s'appelle un tableau, et les éléments 
de ce tableau s'appellent des variables indicées. 


Voyons comment construire ce tableau. 

Pour que Oric puisse connaître le tableau précédent, 
il suffit de lui donner un nom et de définir la structure 
et la taille de ce tableau. Ceci peut se réaliser par le 
mot DIM de la façon suivante : 


5 DIM PRIX(4,25) 


— 64 - 


Explication : PRIX est le nom que nous avons décidé de 
donner au tableau contenant le prix de chaque article de 
chaque magasin. 


Les règles de formation des noms de tableaux sont stric- 
tement les mêmes que celles concernant la formation des 
noms de variables “simples” vues au paragraphe précédent 
et que nous pouvons rappeler brièvement : 


- le premier caractère du nom du tableau doit être 
exclusivement alphabétique (A, ..., Z majuscule). 


- les autres caractères du nom sont alphanumériques : 
(A, ..., Z, Q;, ce. 9). 


- les noms de tableaux doivent comporter au plus 238 
caractères, mais en fait Oric n'utilise que les 
deux premiers pour caractériser le nom. 


— le nom du tableau ne doit pas contenir de mots 
“réservés” du vocabulaire basic de la machine. 


Voyons à présent pourquoi le nom PRIX est suivi par 
deux nombres entre parenthèses. Le document remis par 
votre ami est un tableau qui comporte des lignes et des 
colonnes, c'est ce que l'on appelle un tableau à deux 
dimensions : 


. une dimension “horizontale” puisqu'il y a des lignes. 
. une dimension “verticale” puisqu'il y a des colonnes. 


Physiquement cette notion de dimension se traduit par 
le nombre minimal d'informations qu'il faut fournir pour 
retrouver un élément du tableau. Par exemble, l'élément 
J3 du tableau est à l'intersection de la troisième ligne 
et de la dixième colonne, donc 2 renseignements. 


Le nombre de dimensions d'un tableau est ce que nous 
avons appelé structure du tableau. 


Les parenthèses qui suivent le mot PRIX sont en fait 
les deux caractères qui indiquent à votre Oric qu'il est 
en présence d'un élément de tableau. Et il y a autant de 
nombres dans les parenthèses qu'il y a de dimensions dans 
le tableau. 


s/65= 


Votre Oric vous permet de construire des tableaux 
possédant entre une seule et 88 dimensions. La seule 
limitation est en fait due à la taille de la mémoire de 
votre ordinateur. 

Ceci nous amène tout naturellement à parler de la 
taille des tableaux et de la façon de repérer un élément 


dans son tableau. 


Lorsque nous avons écrit DIM PRIX(4,25), Oric a 
réservé la place nécessaire pour stocker le tableau PRIX, 
et pour lui le tableau a la structure suivante : 


article SON sur, Fe ÿ 95 5725: 
: magasin : : : : ; ; : 
SU ire de de à 
NN MES 
Fe liée au. di, à 


Les éléments de la ligne “article” qui se substituent 
aux lettres A, ..., Z du tableau I sont appelés indices 
de colonne. 


Les éléments de la colonne “magasin” qui se substi- 
tuent aux numéros des magasins du tableau sont appelés 
indices de ligne. 


Chaque indice de colonne repère une colonne différen- 
te et chaque indice de ligne une ligne différente. 


Pour repérer la “case” dans ce tableau PRIX où est 
rangé J3, il suffit de donner le nom du tableau, puis le 
numéro de la ligne où se trouve J3 , c'est-à-dire l'indi- 
ce de ligne, ici 2,et le numéro de la ligne où se trouve 
J3 , c'est-à-dire l'indice de colonne, ici 9. 


Donc la case du tableau PRIX contenant J3 est la va- 
riable indicée PRIX(2,9). 


_ 66 - 


Notez, et ceci est fondamental, que votre Oric fait 
commencer les indices à 0. 


En fait, lors de l'écriture DIM PRIX(4,25), on donne 
à Oric la variable indicée, c'est-à-dire l'élément du 
tableau PRIX, qui possède les numéros d'indices les plus 
grands. 


Ceci nous amène à dire que votre microordinateur ne 
connaît finalement le tableau PRIX que par l'intermédiai- 
re de ses éléments, les variables indicées. 


À la limite, une variable indicée peut être interprê- 
tée comme une variable “simple” ou “élémentaire”, et de 
la même façon qu'il admet des variables entières, alpha- 
numériques ou réelles, Oric admet des tableaux de varia- 
bles indicées entières, alphanumériques, ou réelles. 


— TABLEAUX DE VARIABLES ENTIERES 


Oric reconnaît que toutes les variables indicées d'un 
même tableau sont entières lorsque le dernier caractère 
du nom du tableau est le symbole %. 


Exemple : 5 DIM A%(50) 


Toutes les variables indicées de A%(0) à A%(50) doi- 
vent être entières et comprises entre -32768 et +32767. 


Si vous écrivez : 


10 A%(0)=1.255 
15 PRINT A%(0) 


vous constaterez qu'Oric écrira 1, c'est-à-dire qu'il 
donne le plus grand entier inférieur à 1.255 (comme pour 
les variables entières, il prend la partie entière). 


Bien que la machine accepte l'écriture précédente, il 
est préférable de toujours affecter à une variable indi- 
cée entière, un entier ; ceci peut être réalisé à l'aide 
de la fonction INT (partie entière) éventuellement. 


Pour stocker dans ses mémoires un tableau 
d'entiers, Oric utilise : 

. deux octets contenant les 2 premiers caractères 
du nom du tableau ; 


67 = 


. deux octets contenant l'adresse du tableau 
suivant ; 


. un octet contenant le nombre de dimensions du 
tableau ; 


. deux octets par dimension contenant la valeur 
du plus grand indice dans la dimension ; 


. deux octets par variables indicées entières. 
Voyons ceci sur un exemple. 
Le tableau B%(10,10,10,10) nécessite 

pour stocker ses caractéristiques 


2:+ 24 1 +2.x 4 = 13: octets 
(4 dimensions) 


pour stocker la valeur de chaque élément. 


(11 x 11 x 11 x 11) x 2 = 29282 octets 
nombre d'éléments dans le tableau 


Notez en comparaison que votre Oric dispose au 
maximum de 49.152 octets de RAM en code machine, et 
de 39.421 pour l'usage de la RAM en BASIC. 


— TABLEAUX DE CHAINES DE CARACTERES 


Oric reconnaît que toutes les variables indicées d'un 
même tableau sont alphanumériques lorsque le dernier 


caractère du nom du tableau est le symbole $. 
Exemple : 5 DIM B1$(50,50) 


Toutes les variables indicées de B1$(0,0) à 
B1$(50,50) doivent contenir des chaînes de caractères. 


Si vous tapez 10 B1$(25,10)=23.4 l'interpréteur basic 
vous signalera l'erreur par le message TYPE MISMATCH 
ERROR. 


Pour stocker dans ses mémoires un tableau de 
chaînes de caractères, Oric utilisera : 


— 68 -— 


. deux octets contenant les 2 premiers caractères 
du nom du tableau ; 


. deux octets contenant l'adresse du tableau 
suivant ; 


. un octet contenant le nombre de dimensions du 
tableau ; 


. deux octets par dimension contenant la valeur 
du plus grand indice dans la dimension ; 


. trois octets contenant les paramètres d'iden- 
tification de chaque variable indicée (adresse en 
zone mémoire et longueur de la chaîne de caractères 
affectée à la variable). 


Si chaque élément du tableau B1$ contient une 
chaîne de 10 caractères, votre microordinateur a be- 
soin de 2+2+1+2x2+3x(51x51)=7812 octets pour stocker 
les caractéristiques du tableau BIS. 


11 ne faut pas oublier que pour chaque chaîne de 
caractères, Oric utilise, pour la stocker, un nombre 
d'octets égal au nombre de caractères de cette chaî- 
ne, donc il a besoin de 51x51x10=26010 octets pour 
stocker chaque chaîne de caractères affectée au ta- 
bleau B1l$. 


Donc Oric utilise 33822 octets pour stocker BIS. 


Vous devez retenir de cet exemple que l'emploi de 
tableaux de variables alphanumériques peut nécessiter 
une place mémoire très importante même si ceux-ci ne 
comportent qu'un petit nombre de variables. 


— TABLEAUX DE VARIABLES REELLES 


C'est l'option par défaut que la machine prend lors- 


que le nom du tableau ne possède pas comme dernier carac- 
tère $ ou 4. 


Exemple : 5 DIM BA(100,50) 


Toutes les variables indicées de BA(0,0) à BA(100,5Q} 


devront être ,géelles et comprises entre -1.70141 10 
et 1.70141 107 . 


— 69 - 


Pour stocker dans ses mémoires un tableau de 
réels, Oric utilise : 


. deux octets contenant les 2 premiers caractères 
du nom du tableau ; 


. deux octets contenant l'adresse du tableau 
suivant ; 


. un octet contenant le nombre de dimensions du 
tableau ; 


. deux octets par dimension contenant la valeur 
du plus grand indice dans la dimension ; 


. cinq octets par variable indicée réelle. 
Donc le tableau BA(100,50) nécessite 


- pour stocker ses caractéristique 2+2+1+2x2=9 octets 
— pour stocker la valeur de chaque variable réelle 
101x51x5=25755 octets. 

Soit en tout 25764 octets. 


A noter en comparaison que le tableau BA%(100,50) 
de mêmes dimensions utilise 10311 octets. Ceci de- 
vrait achever de vous convaincre de la nécessité 
qu'il y a de préciser exactement à la machine le type 
des variables et des tableaux de variables que vous 
voulez utiliser. 


Avant de passer au paragraphe suivant qui va vous 
rappeler l'utilisation des opérations arithmétiques 
vues au chapitre précédent, il reste un dernier point 


« 


à préciser à propos des variables indicées. 


Les indices doivent être entiers et strictement 
positifs ou nuls. 


En utilisant les notions vues au chapitre précé- 
dent et les notions sur les variables indicées, vous 
êtes en mesure de réaliser le programme “calcul du 
magasin le meilleur marché". 


Essayez ! 


«0e 


3.3 LES OPERATEURS 


Un opérateur est un outil qui permet d'éxécuter des 
opérations mathématiques ou logiques. Oric distingue 
trois types d'opérateurs, ainsi que vous l'avez vu, les 
opérateurs arithmétiques, relationnels et logiques (ou 
booléens). 


3.3.1 Les opérateurs arithmétiques 


. l'opérateur d'addition noté + 
. l'opérateur de multiplication noté * 
l'opérateur de soustraction noté - 
l'opérateur de division noté / 
. l'opérateur d'élévation à la puissance noté T 


Nous vous rappelons que "A élevé à la puissance B", 
qui s'écrit ATB signifie que l'on multiplie A par lui- 
même B fois. 


Ainsi écrivons 


? 513 [RETURN] 
125 


B n'est pas nécessairement entier mais A est néces- 
sairement un nombre réel strictement positif. 


Si vous tapez 


5 A=-2 
10 PRINT AT1.2 
RUN 


Le basic vous signalera l'erreur par le message ILLEGAL 
QUANTITY ERROR IN 10. 


Bien entendu, les opérateurs arithmétiques n'agissent 
que sur des nombres entiers ou réels, le résultat étant 
un nombre qu'Oric considère comme réel. 


= 7U.= 


3.3.2 Les opérateurs relationnels 


. l'opérateur de stricte supériorité noté > 
(A>B À strictement supérieur à B) 

. l'opérateur de stricte infériorité noté « 
(A<B A strictement inférieur à B) 

. l'opérateur d'égalité noté = 
(A=B À est égal à B) 

. l'opérateur de supériorité noté >= 
(A >B À supérieur ou égal à B) ou = ? 

. l'opérateur d'infériorité noté « = 
(A£B À inférieur ou égal à B) ou = € 

. l'opérateur de non égalité noté > « 
(A ZB A différent de B) ou <> 


Vous pouvez remarquer à cet égard la différence fon- 
damentale de nature entre le signe = opérateur d'égalité 
et le signe = qui signifie que l'on affecte à une varia- 
ble le résultat d'une opération arithmétique. Le basic de 
votre Oric possède une instruction qui permet de ‘“mar- 
quer” cette différence : c'est l'ordre LET. 


Exemple : LET A=1.5+5%4.23 

L'ordre LET assigne à A le résultat de l'opération 
1.5+5%4.23. Il est facultatif, aussi LET A=5 et A=5 
signifient la même chose. Cette signification du signe = 
vous permet de comprendre pourquoi l'expression 


5 A=A+l 


est licite, et ce qu'elle signifie ; à la variable A on 
affecte le résultat du calcul de l'addition A+. 


Rappelons que l'instruction 
10 C=A=B 


signifie qu'à la variable C on affecte le résultat du 
"test" A=B. 


= Por 


Dans un test réalisé avec n'importe lequel des opérateurs 
relationnels, 


ce test est positive C vaut -1, 
ce test est négative à C est affectée la 


si la réponse 
si la réponse 
valeur 0. 


à 
: 
à 


Donc le résultat d'un test (c'est ainsi que nous 
appellerons désormais une expression relationnelle) est 
un entier qui vaut O0 ou -1. 


REMARQUE : Pour améliorer la lisibilité de la 
ligne 10 précédente, c'est-à-dire au niveau de 


l'écriture, bien différencier les deux rôles du signe 
=, vous pouvez adjoindre des parenthèses. 


10 C=(A=B) 


Le rôle des parenthèses utilisées dans des expres- 
sions arithmétiques ou logiques sera reprécisé plus loin. 


3.3.3 Les opérateurs logiques 

. l'opérateur AND qui signifie ET 

. l'opérateur OR qui signifie OU 

. l'opérateur NOT qui prend la négation. 


Les opérateurs logiques, aussi appelés booléens, 
agissent sur des tests (ou expressions logiques ou rela- 
tionnelles). 


— ACTION DE AND 

AND s'utilise ainsi : A AND B, avec A et B expres- 
sions relationnelles ; l'expression globale A AND B 
constitue elle aussi un test. Le résultat du test À AND B 
est positif si la réponse à chacun des deux tests A et B 
est positive. 


— ACTION DE OR 


OR s'utilise ainsi : A OR B, avec À et B tests ; 
l'expression globale A OR B constitue elle aussi un test. 


=-73 


Le résultat du test A OR B est positif si l'une au moins 
des réponses, à l'un des deux tests À ou B, est positive. 


— ACTION DE NOT 


NOT s'utilise ainsi : NOT A, avec À test. L'expres- 
sion globale NOT A constitue elle aussi une expression 
logique. Le résultat du test NOT A est l'opposé du résul- 
tat du test A. 


Ainsi, si la réponse au test A est "vrai", alors la 
réponse au test NOT À est "faux" et réciproquement. 


3.3.4 Règles d'évaluation des expressions arithmétiques 


et logiques 


L'expression 2+3*4 peut s'interpréter de deux façons, 
soit (2+3)x4=20, soit 2+(3x4)=14. 


Pour lever cette ambiguïté Oric utilise des règles 
d'évaluation, c'est-à-dire que certaines opérations 
seront exécutées avant d'autres : cela signifie qu'il y a 
une hiérarchie naturelle des opérateurs. 


L'ordre de priorité décroissant des opérateurs est le 
suivant 


T, NOT, * /, + —-, tous les opérateurs relationnels, AND, 
OR. 


Exemple : PRINT 273+2%3 [RETURN] 
14 


Oric a effectué cette opération de la façon suivante: 
Calcul de 273(=8) puis de 2*3 (-=6) puis finalement de 
(273}+(2%3)=-14. 


Mais si vous, vous vouliez qu'Oric calcule 
(27(3+2))*3, il suffit d'afficher cette opération sur 
l'écran de télévision comme elle est écrite sur cette 
feuille. Ce sont les parenthèses qui permettent de modi- 
fier à volonté l'ordre des opérateurs. 


Lorsque vous utiliserez des parenthèses dans les 
opérations arithmétiques ou logiques, les opérations 
situées à l'intérieur des parenthèses seront effectuées 
avant celles qui sont à l'extérieur des parenthèses. 


= 74 = 


Si vous avez plusieurs niveaux de parenthèse (parenthèses 
imbriquées) ce sont les opérations situées dans les 
parenthèses les plus “intérieures” qui seront effectuées 
les premières, et ainsi de suite. Vérifiez toujours que 
vous avez autant de parenthèses ouvrantes “(" que de 


parenthèses fermantes ; Sinon votre Oric vous signa- 
lera l'erreur par le message SYNTAX ERROR. 


Sur l'exemple précédent (27(3+2))*3, il y a deux 
niveaux de parenthèses : 


(2 TT (3+2))*3 
2ème niveau 
ler niveau 


Maintenant que nous avons défini les "objets" qui 
seront manipulés dans vos programmes, il ne nous reste 
plus qu'à voir les ordres basic qui vont constituer la 
charpente de ceux-ci. 


3.4 LES INSTRUCTIONS BASIC FACULTATIVES 


Nous avons choisi d'appeler ainsi certaines instruc- 
tions basic qui, si elles sont employées, ne sont pas 
prises en compte, ou bien si elles sont absentes, amènent 
la machine à prendre une option par défaut. Leur emploi 
est tout de même fondamental puisqu'elles améliorent de 
façon considérable la lisibilité du programme. 


3.4.1 CLEAR 


Cet ordre permet de remettre toutes les variables 
numériques à zéro et les variables alphanumériques à la 
chaîne “vide”. Cette instruction n'a pas d'utilité en 
début de programme, puisque l'ordre RUN que vous utilisez 
poour lancer le programme initialise automatiquement tou- 
tes les variables à zéro ou au vide. 


Avant d'utiliser cette instruction vérifiez que tou- 
tes les valeurs calculées dans les instructions précédant 
CLEAR ne vous sont plus d'aucune utilité après cet ordre. 
(Ne pas mettre CLEAR dans les boucles FOR ... NEXT et 
REPEAT ... UNTIL par exemple). 





— 75 — 


3.4.2 DIM 


Cette instruction que nous avons déjà rencontrée 
permet de dimensionner un tableau. Elle est facultative. 
En effet si vous écrivez comme première instruction : 


5 BEC(1,1,1) = 7 


Oric considère que BEC est un tableau de réels et que la 
variable indicée de BEC qui possède les indices les plus 
grands est BEC(10,10,10). 


BEC possède donc 11xllx11=1331 éléments. 


Donc, si vous n'utilisez pas DIM, à la première 
variable indicée qu'il trouvera, Oric allouera un tableau 
dont la variable de plus haut niveau d'indice sera 10 
dans chaque dimension. 


Lorsqu'un tableau est dimensionné, il ne peut être 
redimensionné dans la suite du programme. 


Ainsi : 5 DIM A(30) 
10 DIM A(35) 
RUN 


provoque l'affichage du message REDIM'D ARRAY ERROR. De 
même 

5 A(1)=0 

10 DIM A(35) 


provoque l'affichage du même message. 


Ceci s'explique parce qu'Oric, rencontrant la varia- 
ble indicée A(1) à la première ligne du programme, consi- 
dère par défaut que À est un tableau de 11 éléments. La 
ligne suivante est alors considérée comme une tentative 
de redimensionnement du tableau A. 


L'ordre DIM doit précéder toute instruction où un 
élément du tableau dimensionné par DIM est utilisé, pour 
être licite. 


Vous devez vous souvenir que lorsque vous écrivez DIM 
A(35), cela signifie que A(35) est l'élément du plus haut 
indice du tableau A, et que le tableau A possède 36 
éléments A(0), ..., A(35). 


— 76 - 


3.4.3 END 


Cette instruction provoque l'arrêt du programme, mais 
contrairement à l'ordre STOP que nous verrons ultérieure- 
ment, n'indique pas le numéro de la ligne où s'est effec- 


tué l'arrêt du programme. 


Cette instruction n'est pas obligatoire, car l'exécu- 
tion s'arrête lorsque la dernière instruction physique du 
programme est rencontrée (sauf si cette instruction est 
un ordre de transfert, ordre que nous verrons au paragra-— 


phe suivant). 


3.4.4 FRE 


Cette instruction permet de connaître en mode direct 
ou différé, le nombre d'octets encore disponibles dans la 
mémoire de votre microordinateur. 


Exemple : ? FRE (0) 


En mode différé elle a un autre avantage qui peut être 
très intéressant. 


Considérons 
5 A$="ABCDE" 
10 A$="123456" 
15 PRINT AS$ 


Pour exécuter ce programme, votre Oric stockera : 


à la ligne 5 : A, B, C, D, E, l'adresse du premier 
caractère À, la longueur de la chaîne 
A$. 

à la ligne 10 : As: BC; D:. EE, 1, 2% 3, 4,5; 6, 


l'adresse du premier caractère de la 
chaîne A$, c'est-à-dire 1 et la 
longueur de la chaîne AS. 


Cet exemple vous montre que lors du maniement de 
chaînes de caractères Oric stocke toutes les chaînes in- 
termédiaires de calculs, ce qui occupe beaucoup de place. 
Justement l'ordre FRE permet de remédier à ce problème, 
car il permet à votre Oric de libérer ses mémoires de ces 


bouts de chaînes inutiles et encombrants. 


71 = 


11 s'utilise sous la forme 
1030 A = FRE (" ‘“) 


Il permet, lors du maniement de chaînes de caractè- 
res, de “purger” le contenu des mémoires. 


REMARQUE : Cet ordre est évidemment indispensable 
lors du maniement de grandes chaînes de caractères ou 
lorsqu'il y a beaucoup d'opérations effectuées sur 
ces chaînes. Par contre cet ordre demande un certain 
temps d'exécution. 


3.4.5 LET 


Cette instruction qui est facultative assigne une 
valeur à une variable. 


Exemple : 5 LET A=3 


Bien entendu, la variable et la constante doivent 
être de même type. (Si la variable est entière, la cons- 
tante étant réelle, la valeur effective assignée à la 
variable est l'entier immédiatement inférieur. 


3.4.6 STOP 


Cette instruction provoque l'arrêt de l'exécution du 
programme. 


Si vous tapez 


10 A=10 

15 STOP 

20 PRINT A 
RUN 


Oric répond 

BREAK IN 15 
C'est-à-dire que, lors de l'utilisation du mot STOP, le 
programme s'arrête là où cet ordre est interprêté et il y 
a affichage du numéro de la ligne où se situe l'ordre qui 


a provoqué l'arrêt du programme. 


— 78 - 


3.4.7 REM 


Cette instruction a pour seul but de vous permettre 
d'insérer des commentaires dans vos programmes. 


Lorsque l'interpréteur basic rencontre cette instruc- 
tion en début de ligne, celle-ci est considérée comme 
inexistante. Ainsi, si vous mettez plusieurs instructions 
basic sur la même ligne (ce qui est permis par le carac- 
tère :) où REM est le premier ordre, ces instructions ne 
seront pas prises en compte. 


Exemple : 5 REM PROGRAMME D'ESSAI : A=1 : PRINT A 
10 STOP 
RUN 


Sur l'écran vous voyez s'afficher : 
BREAK IN 10 


Cette instruction est fondamentale car il ne faut pas 
oublier que la principale qualité d'un programme est, 
outre sa justesse bien entendu, sa lisibilité. Celle-ci 
permet aux utilisateurs et à l'auteur... de comprendre 
pas à pas ce qu'effectue le programme lors de sa lecture. 


Toutes les instructions que nous venons de voir sont 
"facultatives". Elles ont un autre point commun dans la 
mesure où l'interpréteur basic les prend en compte sui- 
vant l'ordre croissant du numéro de la ligne dans laquel- 
le elles se trouvent. Nous allons voir à présent des 
instructions qui permettent de modifier l'ordre de dérou- 
lement d'un programme, c'est ce que l'on appelle des 
ordres de transfert. 


3.5 LES INSTRUCTIONS DE TRANSFERT 


Le basic de votre microordinateur distingue deux 
types d'instruction de transfert. 


3.5.1 Les ordres de transfert inconditionnels 
— GOTO 
Cet ordre indique, à l'interpréteur, d'aller exécuter 


_- 79 - 


4 


les instructions à partir d'une ligne donnée du program- 
me. 


Exemple : 5 I=I+l 
10 GOTO 5 
15 END 
RUN 


Sur cet exemple vous pouvez voir que le nombre qui suit 
l'ordre GOTO (5) est entier, c'est le numéro de la ligne 
où l'on veut se brancher. Ce nombre est exprimé explici- 
tement mais peut aussi être calculé comme dans l'exemple 
suivant 


5 I = 20 

10 GOTO I 

15 STOP 

20 PRINT I 
251 =1-35 
28 GOTO I 


L'entier qui suit GOTO doit effectivement correspon- 
dre à un numéro de ligne existant dans le programme. 


Eliminez les modifications précédentes et écrivez 


10 GOTO 30 
RUN 


Il n'y a pas de ligne 30 dans le programme, le message 
d'erreur UNDEF'D STATEMENT ERROR s'affiche sur l'écran. 


Si vous revenez à l'exécution du programme initial, 
vous vous rendez compte qu'effectivement le programme se 
rebranche toujours à la ligne 5... et vous ne passez 
jamais par la ligne 15. Autrement dit ce programme ne 
peut pas s'arrêter de lui-même. Pour ‘reprendre la main” 
vous êtes obligé de taper [CTRL] [C] ou d'appuyer sur 
[RESET], touche située à l'opposé du clavier. 


Cet exemple vous montre donc ce qu'est une boucle 
sans fin. 


C'est en fait la chose dont il faut se méfier avec 
cette instruction GOTO. En général on remédie à ce pro- 
blème en utilisant un ordre de transfert conditionnel 
(voir plus loin). 


— 80 - 


Loa ON .…. GOTO 


Cette instruction est, elle aussi, un ordre de trans- 
fert inconditionnel, mais elle s'emploie un peu différem- 
ment de GOTO. 


Voyons ceci sur l'exemple suivant : 


5 REM EXEMPLE D'UTILISATION DE L'£INSTRUCTION 
ON ... GOTO 

10 INPUT "I=";I 

15 ON I GOTO 25, 30 

20 STOP 

25 PRINT "LORSQUE I=1 LE TRANSFERT S'EFFECTUE 
SUR" 

26 PRINT "LA PREMIERE ETIQUETTE DU GOTO" 

27 GOTO 10 

30 PRINT “LORSQUE I=2 LE TRANSFERT S'EFFECTUE 
SUR" 

31 PRINT "LA DEUXIEME ETIQUETTE DU GOTO" 

35 GOTO 10 


Pour I entrez successivement 1, 2, 3 et observez ce 
qui se produit, puis relancez le programme et entrez O0, 
255, 256, -1. 


Vous voyez donc que lorsque vous tapez ON I GOTO 25, 
30, I se rapporte à la position du numéro de ligne sur 
laquelle on veut se brancher : I doit donc être un en- 
tier. Si vous entrez un réel, Oric effectuera l'opération 
qui vous est maintenant familière : il affecte à I le 
plus grand entier inférieur à ce réel. 


Lorsque vous avez entré 256 ou -1, la machine répond 
ILLEGAL QUANTITY ERROR. Ceci vous prouve que I doit tou- 
jours être positif, d'une part, et d'autre part que vous 
n'avez droit qu'à 255 numéros de lignes derrière le GOTO. 


Lorsque vous avez tapé O0 ou 3, vous vous êtes rendu 
compte que la machine s'arrêtait à la ligne 30, c'est-à- 
dire que si I est nul ou si I est plus grand que le nom- 
bre d'étiquettes derrière le GOTO (I1£<255), l'instruction 
ON ... GOTO est ignorée et l'interpréteur passe à la li- 
gne suivante. Bien entendu, les numéros de lignes situés 
derrière le GOTO sont entiers et explicités. Ils doivent 
correspondre à des numéros de lignes existants. 


- 81 - 


3.5.2 Les ordres de test ou de comparaison 
Ka IF . THEN . ELSE 


Cet ordre que vous avez vu au chapitre précédent 
appartient au deuxième type d'instruction de transfert : 
c'est un ordre de transfert conditionnel. 


Rappelons, sur l'exemple vu pour l'instruction GOTO, 
le fonctionnement de IF ... THEN ... ELSE. 


5 I=I+1 

10 PRINT I 

15 IF (I > 1000) THEN STOP ELSE GOTO 5 
RUN 


Lors de l'exécution vous voyez défiler sur l'écran 
tous les nombres entiers de 1 à 1000 puis BREAK IN 15 ; 
que s'est-il passé ? 


La ligne 15 se traduit littéralement par : 


Si I > 1000 alors l'exécution s'arrête, sinon le program- 
me se branche à la ligne 5 et c'est ce que permet de fai- 
re cette instruction. 


Sa syntaxe est IF A THEN B ELSE C. À est un test (ex- 
pression logique) B et C étant des instructions basic. Si 
la réponse au test A est “vrai”, l'ordre B est exécuté 
sinon c'est l'ordre C qui est exécuté. 


L'ordre ELSE est facultatif. S'il est absent et que 
le test À est faux le programme passe à la ligne suivan- 
te. Si le test A est vrai, l'ordre B et exécuté comme 
précédemment. 


Si vous écrivez IF A THEN cette instruction de trans- 
fert n'a aucune action. 


Si ELSE est utilisé, B ne devra pas comporter d'opé- 
rations arithmétiques, sinon il apparaîtra le message 
SYNTAX ERROR IN lorsque B sera exécuté. 


Le programme suivant vous montre un exemple simple 
d'utilisation de l'instruction IF ... THEN ... ELSE. 


— 82 — 


10 REM SAISIE DE DONNEES 

20 REM 

30 INPUT "NOM DE L'ARTICLE";NS 

40 INPUT "PRIX";PX 

50 PRINT NS, PX 

60 INPUT “VALIDEZ-VOUS CES DONNEES ‘"; AS 

70 IF ((A$<>"O") AND (A$<>"N")) THEN 60 
ELSE IF (A$="O") THEN PRINT "DONNEES 
ENTREES" ELSE 30 

80 END 


Faites exécuter ce programme plusieurs fois en tapant 
par exemple : 


DRAP 
puis 70. 
puis N (non) 
puis O (oui) 


à la question VALIDEZ-VOUS CES DONNEES ? 


REMARQUE : Il ne peut y avoir dans une instruc- 
tion basic plus de deux tests IF consécutifs. Par 
exemple, la ligne 70 du programme ci-dessus serait 
refusée, si vous remplaciez l'instruction PRINT 
"DONNEES ENREGISTREES" par l'instruction nouvelle IF 
(PX=0) THEN 40. 


Nous avons donc vu les instructions basic qui permet- 
tent d'exécuter des instructions d'une ligne de program- 
me, à partir d'une autre. Par ailleurs vous avez vu un 
exemple de “boucle” que l'on peut effectuer à l'aide de 
l'ordre IF ... THEN ... ELSE GOTO. En fait le basic de 
votre Oric a des commandes qui sont spécifiques à ce 
genre de cas ; ce sont ces instructions que nous allon 
examiner maintenant. : 


3.6 LES BOUCLES 
Le basic de votre microordinateur possède deux ins- 
tructions spécifiques et distinctes pour faire du calcul 


répétitif qu'on appelle boucles 


L'instruction FOR ... TO ... STEP ... 
NEXT ... 


et l'instruction REPEAT 
UNTIL 


— 83 - 


Ces deux groupes d'ordres permettent de faire répéter 
autant de fois que l'on veut les instructions situées 
entre les deux lignes qui constituent la syntaxe des deux 
groupes d'instruction. 


3.6.1 FOR ... TO ... STEP ... NEXT ..e 


Voyons l'utilisation de cette instruction sur un 
exemple 


5 REM CALCUL DU MAGASIN LE MEILLEUR MARCHE 
10 DIM PRIX(4,25) : DIM PANIER(4) 
15 REM ENTREE DES DONNEES ET CALCUL DU PRIX 
DE CHAQUE PANIER 
20 FOR I=0 TO 4 STEP l| 


22 IPI1=I+l 

25: FOR J=0 TO 25 STEP ! 

27: JP1=J+1 

30: PRINT “QUEL EST LE PRIX DU PRODUIT 
No";JP1; "DANS LE MAGASIN";IP1 

33: INPUT PRIX(I,J) 

35: PANTER(I)=PANIER(I)+PRIX(I,J) 


40: NEXT J 

45: NEXT I 

50 REM RECHERCHE DU MAGASIN LE MEILLEUR 
MARCHE 

55 K=PANIER(O) : L=0 

60 FOR I=1 TO 4 

65 IF (K> PANIER(I)) THEN L=I 

70 IF (K> PANIER(I)) THEN K=PANIER(I) 

72 NEXT I 

73 LP1=L+1 

75 PRINT "LE MAGASIN No";LP1;"EST LE MEILLEUR 
MARCHE CE MOIS-CI" 

80 END 


Examinons la syntaxe de cette instruction de boucle. 


À la ligne 20, nous avons FOR I=0 TO 4 STEPI et en 45 
NEXT I. Ceci signifie que toutes les instructions situées 
entre les lignes 20 et 45 seront exécutées tant que le 
réel I (qui est appelé indice de la boucle) sera infé- 
rieur à 4. Ici O0 est la valeur initiale de I et 4 la 
borne supérieure de I. l est le nombre qui est ajouté à I 
chaque fois que l'instruction de la ligne 45 est exécutée 
(on dit que l'on incrémente I de 1 lorsque NEXT I est 
exécuté). 


— 84 — 


Le test de comparaison de I et de sa borne supérieure 
n'est effectué qu'à l'instruction NEXT I, ce qui signifie 
que, quelle que soit la valeur de I, les instructions qui 
sont dans la boucle seront effectuées au moins une fois. 


Dans la ligne 60 vous voyez que STEP n'a pas été 
utilisé. En fait ce mot est facultatif ; lorsqu'il n'est 
pas employé la machine prend par défaut un pas égal à 1. 


En résumé la syntaxe de l'instruction s'écrit : 


FOR I=A TO B STEP C 


NEXT I 


A, Bet C sont des nombres réels quelconques (ç peut 
être négatif), ce sont les paramètres de la boucle. Lors- 
que I est supérieur ou égal à B (si C est positif) ou I 
inférieur ou égal à B (si C est négatif), la boucle est 
"désactivée"; c'est l'instruction qui est après NEXT I 
dans le programme qui est alors exécutée. Il est forte- 
ment déconseillé de modifier les paramètres de la boucle 
à l'intérieur de celle-ci. 


Dans les lignes qui sont situées dans la boucle peut 
figurer n'importe quel ordre basic. Vous pouvez utiliser 
un ordre GOTO pour sortir d'une boucle. Mais ceci n'est 
pas recommandé car le basic, n'ayant jamais exécuté le 
test (I supérieur ou égal à B ou L inférieur ou égal à B) 
avec une réponse positive, considère que la boucle est 
toujours active bien que, physiquement, ce ne soit pas le 
cas. 


Vous pouvez, bien entendu, mettre une instruction FOR 
+. TO ... STEP ... NEXT ... dans une boucle (voir ligne 
25 à ligne 40 de l'exemple précédent) ; dans ces condi- 
tions on dit que l'on est en présence de boucles imbri- 
quées. La syntaxe des boucles imbriquées est : 

10 FOR I=Al TO Bl STEP C1 
100 FOR J=A2 TO B2 STEP C2 | 
200 NEXT J 
300 NEXT I 


_- 85 - 


Les indices des deux boucles doivent avoir un nom 
différent, sinon la boucle extérieure est rendue inacti- 
ve. Il n'y a aucun inconvénient à ce que deux boucles non 
imbriquées aient le même indice (cf exemple précédent). 
Il y a incrémentation sur l'indice extérieur à chaque 
fois que la boucle intérieure est “désactivée”. On ne 
peut pas imbriquer plus de 10 boucles les unes dans les 
autres, sans obtenir le message NEXT WITHOUT FOR ERROR. 
Si vous laissez plus de dix boucles “actives” parce que 
vous “sortez” de celles-ci par l'ordre GOTO, le même 
message s'affichera. 


La syntaxe 10 FOR I=A1 TO B1l STEP C1 

100 FOR J=A2 TO B2 STEP C2 

200 NEXT I 

300 NEXT J 

où, vous le remarquez, deux boucles se "croisent", est 


erronée. En présence de telles boucles, il y a affichage 
du message d'erreur NEXT WITHOUT FOR ERROR. 


Considérons le problème suivant : on se propose de 
trouver des triplets de nombres 2 2 (As B, C) À, B, C 
compris entre Ll et N tels que =ç? (côtés d'un 


triangle rectangle). Une solution classique de ce problè- 
me est le triplet (3, 4, 5). On peut écrire le programme 
suivant : 
5 REM RECHERCHE DES CARRES DE PYTHAGORE 
JUSQU'A UN CERTAIN RANG 


8 CLS 
10 INPUT “VEUILLEZ ENTRER LA BORNE SUPERIEURE 
N';N 


15 FOR A=L TO N 
17 AX=INT(A) 
20: FOR B=1 TO N 
23: BX=INT(B) 


25: FOR C=1 TO N 

27: CY=INT(C) 

30: IF ((A%%A%+B%XB%-CXkC%)=0) THEN 
PRINT A,B, C 

35: NEXT C 

40: NEXT B 

45 NEXT A 

50 END 


— 86 -— 


Vous remarquerez que l'exécution de ce programme est 
longue, surtout lorsque N est grand. La question que l'on 
peut se poser est : peut-on remédier à ce problème ? 


Dans ce programme, on peut observer quelques points 
“"litigieux". 


Dans le test de la ligne 30 vous constatez que l'on 
calcule dans la boucle la plus intérieure les produits 
AX*A% et B%*B% à chaque incrémentation sur C. Or les deux 
variables A% et B% sont indépendantes de C. Par consé- 
quent dans la boucle 


25 FOR C=1 TO N 
35 NEXT C 


AX%*A% et BX*B% sont des constantes ; il est inutile de 
les recalculer dans cette boucle. Ces produits doivent 
donc être évalués à l'extérieur de la boucle. 


Il faut donc retenir pour vos programmes futurs que 
lorsque vous utiliserez des boucles, il faut vérifier si 
à l'intérieur de celles-ci vous n'effectuez pas des opé- 
rations sur des variables indépendantes de l'indice de la 


boucle. 


Pour ce programme spécifique, il est encore possible 
d'améliorer la vitesse d'exécution. En effet, il est 
inutile de faire jouer à À et B le même rôle puisque, par 
exemple, les triplets (3, 4, 5) et (4, 3, 5) sont en fait 
igensiques. On décide que A sera inférieur à B, et 
A +B =C montre que À et B sont strictement 
inférieurs à C (d'ailleurs A est alors strictement 
inférieur à B). Ceci permet de modifier les paramètres 
des diverses boucles, afin de diminuer le nombre 
d'itérations. 


Ainsi : C variera de L à N 
B variera de L à C-1 
À variera de INT (SQR(2*C-1)) à B-1 


Il faut en fait retenir de cette dernière série de 
modifications que lorsque l'on utilise des boucles, jil 
faut, en fonction du problèm que l'on veut résoudre, 
choisir avec une très grande minutie les valeurs des 
bornes des boucles. 


ST 


Le programme modifié s'écrit : 


REM RECHERCHE DES CARRES DE PYTHAGORE 
JUSQU'A UN CERTAIN RANG 
CLS 
INPUT "VEUILLEZ ENTRER LA BORNE SUPERIEURE 
N" 3; N 
FOR C=1 TO N 
CX=INT(C) 
C14=CX*CZ 
N1=C-1 
N2=INT (SQR(2*C-1)) 
FOR B=1 TO N1 
BX=INT(B) 
RX=C17-BX*BX 
N3=B-1 
FOR A=N2 TO N3 
AY=INT(A) 
IF(R%-A%%*A%=0) THEN PRINT À, B, C 
NEXT A 
NEXT B 
NEXT C 
END 


- Remarquez l'utilisation du caractère : qui permet 


d'améliorer la 


3.6.2 REPEAT 


lisibilité. 


.<.. UNTIL 


Voyons un exemple de cet autre type de boucle 


90 
100 
110 
120 
130 
140 


REM DEVINETTE D'UN CHIFFRE CHOISI PAR ORIC 
NB#%=INT(9*RND(1)) 

REPEAT 

INPUT "ENTREZ UN CHIFFRE"; C# 

NCX=NCZ+1 

UNTIL (NB%=C#) 

PRINT “VOUS AVEZ TROUVE EN";NC#;" COUPS" 
ON NC% GOTO 90, 90, 90, 110, 110, 110, 
130, 130, 130 

PRINT “CHANCE EXCELLENTE" 

END 

PRINT “CHANCE MOYENNE" 

END 

PRINT “PAS DE CHANCE" 

END 


— 88 - 


Ce qui peut se traduire littéralement par 


“Répéter les instructions situées entre REPEAT et 
UNTIL jusqu'à ce que la réponse au test soit positive". 


La fonction de cette boucle est donc un peu différen- 
te de FOR ... TO ... NEXT ... car c'est à vous de prévoir 
les itérations successives et les incrémentations sur la 
variable testée. Cette possibilité d'incrémenter à l'aide 
d'une fonction quelconque apporte plus de souplesse, mais 
il se peut que l'on ne puisse sortir de la boucle. 


Exemple : 5 REPEAT 
10 PRINT “JE BOUCLE SANS FIN, SANS FIN..." 
15 UNTIL (I=1) 


Vous voyez dans ce cas extrême que si vous n'incrémentez 
pas suffisamment sur la “variable de boucle” qui est 
testée, la boucle REPEAT ... UNTIL est sans fin (par ana- 
logie avec la boucle FOR ... NEXT, on appelle variable de 
boucle la variable sur laquelle s'effectue le test). 


Pour reprendre la main faire [CTRL] [C] ou [RESET]. 


3.7 SOUS-PROGRAMMES 


3.7.1 Présentation 


La notion de sous-programme n'est pas évidente a 
priori. Présentons-la dans un exemple. 


10 X=0 : y=0 

20 GOSUB 70 

30 PRINT A 

40 X=5 : Y=15 

50 GOSUB 70 

55 PRINT A 

60 END 

70 REM SOUS-PROGRAMME 

80 IF (X=5) THEN PRINT X ELSE A=Y-X 
90 IF (X=0) THEN PRINT X ELSE A=X-Y 
100 RETURN 


— 89 - 


Un sous-programme est utile pour éviter de répéter 
plusieurs fois des lignes d'instructions identiques, dès 
que l'on utilise deux fois une même séquence basic. 


La structure d'un programme utilisant un sous- 
programme est la suivante 


: a 
150 GOSUB 1000 : 


160 : 2000 RETURN 


250 GOSUB 1000 
260 : Rs 


L'utilisation d'un sous-programme permet aussi de 
décomposer un programme en parties simples à mettre au 


point. 


Sur cet exemple nous voyons que l'ordre GOSUB sert à 
appeler le sous-programme. L'entier qui se trouve der- 
rière ce mot est le numéro de ligne de la première 
instruction du sous-programme. Cet entier doit être 
explicité et non calculé. Cet entier doit bien entendu 
correspondre à un numéro de ligne existant, sinon Oric 
affichera le message d'erreur UNDEF'D STATEMENT IN (numé- 
ro de ligne où figure le GOSUB erroné). Le mot RETURN 
signifie au basic que le sous-programme est terminé. Donc 
Oric ne reconnaît qu'une partie de programme est un sous- 
programme que s'il y a un GOSUB indiquant le numéro de 
ligne où commence le sous-programme, et un RETURN 
indiquant sa fin. Les capacités de la machine sont telles 
que l'on ne peut pas appeler plus de vingt-cinq sous- 
programmes en même temps (ceci se réalise en construisant 
des sous-programmes qui font appel à d'autres sous- 
programmes). Si on le tente il y a affichage du message 


OUT OF MEMORY 
C'est pourquoi le programme suivant 


1 GOSUB 100 
5 END 
100 I=1+1 
[110 GOSUB 100 
120 RETURN 


est interdit puisque le sous-programme écrit sur les 
lignes 100, 110 et 120 s'appelle lui-même. 


00e 


Dans ce cas précis, la machine considèrera, après la 
25ème “itération” (appel du sous-programme par le sous- 
programme) qu'il y a plus de 25 appels à des sous-pro- 
grammes en même temps, et elle affichera donc le message 
d'erreur ci-dessus. 


Pour la cohérence des programmes, il est vivement 
conseillé d'entrer dans un sous-programme par un GOSUB et 
d'en sortir par l'ordre RETURN ; et non d'utiliser l'or- 
dre GOTO. 


3.7.2 ON ... GOSUB 


Cet ordre est similaire à l'ordre ON ... GOTO, dans 
une certaine mesure, ainsi que nous allons nous en rendre 
compte avec l'exemple qui suit 


5 FOR I=1 TO 2 
10 ON I GOSUB 100,200 : NEXT I 
15 END 
100 PRINT "LORSQUE I=1 LE SOUS-PROGRAMME DE 
LA LIGNE 100 EST APPELE" 
110 RETURN 
200 PRINT “LORSQUE I=2 LE SOUS-PROGRAMME DE 
LA LIGNE 200 EST APPELE" 


210 RETURN 
Vous voyez donc que ON ... GOSUB fait la même chose 
que ON ... GOTO, à ceci près que GOTO provoque un trans- 


fert inconditionnel alors que GOSUB est un appel à un 
sous-programme. Nous vous rappelons donc les règles de 
syntaxe à respecter 


1, qui correspond à la position des étiquettes der- 
rière GOSUB, doit être entier (en fait non alphanuméri- 
que), et compris entre 0 et 255. 


Si I est nul, ou si I est plus grand que le nombre de 
numéros de ligne situés derrière GOSUB, alors l'ordre ON 
... GOSUB est ignoré (ne provoquera pas d'appel à un 
sous-programme). Bien entendu, les numéros de ligne sont 
entiers et explicités, ils correspondent à des numéros de 
ligne existant dans le programme. 


_— 91 - 


3.7.3 CALL 
Exemple : CALL A 


Cet ordre est un appel à un sous-programme écrit en 
code machine (aussi appelé langage machine). 


A est un entier en base hexadécimale qui indique 
l'adresse, en mémoire de la machine, de la première ins- 
truction du sous-programme. 


L'utilisation du langage machine demande beaucoup de 
précaution dans la mesure où l'interpréteur basic de 
votre Oric ne peut pas en contrôler la validité. 


De plus, vous devez être absolument certain que les 
instructions que vous allez utiliser ne vont pas “pol- 
luer"” les zones mémoires réservées au basic de l'Oric. 
Dans le cas où vous modifiez le contenu de ces mémoires, 
il se pourrait que vous ne puissiez même pas revenir au 
programme basic qui appelait le sous-programme en langage 
machine. 


3.7.4 DEF USR 
Exemple : DEF USR=A avec À entier en base hexadécimale. 


Cette instruction permet de définir l'adresse en 
mémoire de la première ligne d'un programme écrit en lan- 
gage machine. 


3.8 LES FONCTIONS 
3.8.1 Fonctions numériques internes 


Plusieurs fonctions numériques existent dans le basic 
de l'Oric. Ces fonctions sont monovariables, c'est-à-dire 
qu'elles n'agissent que sur UNE seule variable. 


Nous donnons ci-dessous une liste de ces fonctions 
sans les expliquer en détail, car elles ont été déjà uti- 


lisées précédemment, ou bien elles demandent d'importan- 
tes connaissances mathématiques. 


— GENERATION D'UN NOMBRE ALEATOIRE 
RND(X) retourne un nombre aléatoire compris entre 0 et 1. 


_- 92 - 


, 


si X est positif, un nouveau nombre est généré à 
chaque appel, 


si X est nul, le dernier nombre est généré à nouveau, 


si X est négatif, le nombre correspondant à X est 
PR RP TT fa ED. S. , — » 
générée (table de nombres en mémoire). 


— FONCTIONS MATHEMATIQUES SIMPLES 
ABS(X) valeur absolue de X 


INT(X) partie entière de X (plus grand entier infé- 
rieur à X 


SGN(X) signe de X 
SQR(X) racine carrée de X 

— FONCTIONS MATHEMATIQUES COMPLEXES 
ATN(X) arctangente de X 
COS(X) cosinus de X 
EXP(X) exponentielle de X 
LN(X) logarithme népérien de X 
LOG(X) logarithme décimal de X 
SIN(X) sinus de X 
TAN(X) tangente de X 


Ces fonctions sont décrites avec plus de détails en 
annexe A. 


3.8.2 Fonctions traitant les chaînes de caractères 

Oric offre plusieurs fonctions à une seule variable 
permettant de manipuler les chaînes de caractères. Cel- 
les-ci peuvent se classer en trois groupes 

- conversion code ASCII/caractère et réciproque 

- conversion chiffre/caractère et réciproque 


- manipulation, extraction de chaînes de caractères 


— 93 — 


- FONCTIONS DE CONVERSION CODE ASCII/CARACTERE 


Ces fonctions sont utiles pour avoir accès à des 
caractères spéciaux, ou pour accéder directement à la 
représentation des chaînes de caractères en mémoire. 


CHR$S(X) génère le caractère de code ASCII égal à X 
0 £<X< 31 caractères spéciaux 
32<X <128 lettres et chiffres 

ASC(X$) fournit le code ASCII du premier caractère de 
la chaîne XS. 

Exemple : 10 PRINT CHR$S(65) donne le caractère A 


10 PRINT ASC("A") donne la valeur 65 
- FONCTIONS DE CONVERSION CHAINE DE CARACTERES /NOMBRE 


Ces fonctions sont utiles si l'on veut par exemple 
demander dans un programme l'entrée d'une donnée qui peut 
être une lettre (A-Z), ou un chiffre (0-9). 


STRS(X) crée une chaîne contenant les chiffres X 


Exemple : 10 AS=STRS(45) 
Après exécution de cette instruction, la va- 
riable alphanumérique A$ contiendra les ca- 
ractères "45". 


VAL(XS) est l'entier correspondant à la valeur numé- 
rique de la chaîne 


Exemple : 10 B$="1579ABC" 
20 C=VAL(B$) 
Après exécution des instructions 10 et 20, la 
variable numérique contiendra la valeur 1579. 


— FONCTIONS DE TRAITEMENT DE CHAINES DE CARACTERES 


Plusieurs fonctions du basic de l'Oric permettent 
d'extraire des caractères ou des sous-chaînes d'une 
grande chaîne. 


LEFTS(AS,X) crée la chaîne constituée des X premiers 
caractères de A$. 


Exemple : 10 CS=LEFTS("ABCDEFGHIJ",3) 
La variable alphanumérique C$ contiendra ABC. 
— 94 — 


La fonction RIGHTS joue le même rôle que LEFTS, mais 
en extrayant les caractères à partir de la droite. 


Exemple : RIGHTS$("0123456",4)="3456" 


Il est possible d'extraire des caractères situés au 
milieu d'une chaîne de caractères. 


La fonction MIDS(A$,D,X) a un argument supplémentaire 
qui est le rang, dans la chaîne, du caractère à partir 
duquel on désire effectuer l'extraction. 


Exemple : MIDS("0123456",3,4)="2345" 


Deux autres fonctions encore existent, qui traitent 
les chaînes de caractères. 


LEN(AS$) fournit la longueur de la chaîne A$ 
Exemple : LEN("0123456")=7 


+ est un opérateur de concaténation (mise bout à 
bout) de chaînes de caractères. 


Exemple : "01"+"23456"="0123456" 


3.8.3 Création de fonctions utilisateurs 

Supposez que dans un programme vous ayez besoin - à 
de nombreuses reprises et sans possibilité d'utiliser des 
boucles - d'une fonction du type : 

sin(5x)+3x2exp(xt3)+ABS(L/xtcosx) 

Vous vous rendez bien compte qu'il serait vite fasti- 
dieux de réécrire à chaque fois cette expression numéri- 
que. C'est pourquoi votre Oric dispose d'instructions 
permettant de construire vos fonctions et de vous en 
servir comm de fonctions internes de la machine. 

Ces instructions sont 


DEF FN ... pour la construction de la fonction 


FN ... pour son appel 


_- 95 - 


Exemple d'utilisation : 


— construction de la fonction “explicite” : 
1000 DEF FNA(X)=SIN(5*X)+3*X#*X#EXP (X+3 )+ABS((1/X)+COS(X)) 


La syntaxe est donc DEF FN nom de la fonction = 
expression numérique ou alphanumérique. Le nom de la 
fonction suit les règles de formation des noms de varia- 
bles, c'est-à-dire : 


. le premier caractère du nom est alphabétique (A, 
+, Z majuscule) ; 


. les autres caractères du nom sont alphanumériques 
(A, cc, Z, O0, ..., 9) 3 


. seuls les deux premiers caractères sont pris en 
compte par la machine pour caractériser la fonction ; 


. pas de mots réservés dans les noms de fonctions. 


Les fonctions peuvent être numériques ou alphanumériques. 
Ainsi 


DEF FNA(X) définit une fonction numérique (réelle). 
DEF FNA$(X) définit une fonction alphanumérique. 


Bien entendu l'expression derrière le signe = doit 
être du même type que la fonction. 


Ce sont les caractères FN placés devant le nom de la 
fonction qui indiquent à l'interpréteur basic qu'il n'est 
pas en présence d'une variable indicée. 

Les “appels” à la fonction utilisateur s'effectuent 
de la façon suivante. 


Sur l'exemple précédent : 
2005 PRINT FNA(5) 
En fait vous devez faire comme si (FN nom de la fonc- 
tion) était le nom de votre fonction et vous en servir 
comme d'une fonction interne à la machine. De plus sa 


définition doit précéder son utilisation. 


= 96 - 


Bien entendu ces fonctions dites explicites sont, ainsi 
que les fonctions internes, dépendantes d'une seule 
variable. Si vous avez besoin de fonctions agissant sur 
plusieurs variables vous ferez appel à ce qui a été vu au 
paragraphe précédent : les “sous-programmes"”. 





3.9 LES ORDRES D'ENTREES/SORTIES 


Les instructions que nous allons voir permettent 
d'échanger des informations entre l'extérieur (c'est-à- 


dire vous) et le microordinateur. Certaines de celles-ci 
vous sont déjà familières. 


3.9.1 INPUT 
Exemple d'utilisation : 


5 INPUT "ENTREZ LES DONNEES" ,1l;I,,1$ 
RUN 


Lorsque l'interpréteur basic rencontre cet ordre, il 
écrit le commentaire suivant 


ENTREZ LES DONNEES ? 


et il attend que vous entriez les données (tant qu'elles 
ne sont pas entrées, le programme est stoppé). Pour en- 
trer les données vous pouvez faire ainsi : 


1.23,4.50 E3,"TOTO" [RETURN] 


les trois données sur la même ligne séparées par une 
LL LL 
22 


Ou bien ? 1.23 [RETURN] 
2? 4.50 E3 [RETURN] 
22 “TOTO" [RETURN] 


et toutes solutions intermédiaires entre ces deux extréê- 
mes. 


Les données ne sont prises en compte que si vous 


tapez sur [RETURN], donc toute donnée peut être corrigée 
avant d'actionner cette touche. Par contre les données ne 


- 97 - 


sont pas conservées d'une exécution sur l'autre, ce qui 
oblige à les retaper toutes à chaque exécution. Bien 
entendu, vous devez entrer autant de données qu'il y a de 
variables derrière INPUT, et les données doivent être du 
même type que les variables auxquelles elles sont affec- 
tées. 


3.9.2 GET 
Exemple d'utilisation 


5 GET A 
10 PRINT A 
RUN 


Lorsque vous utilisez cette instruction, le basic 
attend une donnée constituée d'un seul caractère, qui est 
soit numérique (0-9) si la variable est réelle, ou quel- 
conque si la variable est alphanumérique (le caractère 
est tout de même différent de “). L'exécution est arrêtée 
tant que le caractère n'est pas tapé sur le clavier. Le 
basic prend en compte le caractère dès que vous le tapez 
sur le clavier (pas besoin de [RETURN] pour enregistrer 
la donnée). Le caractère tapé n'apparaît pas sur l'écran 
(aucun moyen de correction possible par l'opérateur. 
Correction par le programme). 


3.9.3 KEYS 
Exemple d'utilisation 


5 REPEAT 

10 PRINT “TAPEZ SUR + POUR ARRETER" 
15 UNTIL (KEY$="+") 

20 END 


KEY$ effectue grosso modo la même chose que GET, dans 
la mesure où on rentre un caractère du clavier ; mais la 
différence fondamentale est que le programme n'est pas 
stoppé si vous ne répondez pas (si vous n'entrez pas de 
données). Cet ordre est donc essentiel pour les jeux 
(graphiques en particulier), qui seront abordés au pro- 
chain chapitre. 


— 98 - 


3.9.4 READ -— DATA 
Exemple d'utilisation : 


5 READ A,B,C$ 

20 PRINT A,B,C$ 

50 DATA 1.253,454,"TOTO" 
60 END 


READ assigne aux variables A, B, C$ des valeurs sto- 
ckées pour une instruction DATA. READ joue à peu près le 
même rôle que INPUT, sinon qu'au lieu de rentrer les don- 
nées en cours d'exécution, elles sont entrées dans le 
programme grâce à des instructions DATA. Les caractères 
séparant les données dans les instructions DATA sont des 
virgules. La syntaxe est : 


READ variable 1, variable 2, ... 

Si variable 1 est la nifæ variable rencontrée 
depuis le début du programme dans un ordre READ, elle 
recevra la valeur de la n°" donnée stockée dans un 
ordre DATA ou dans des ordres successifs. Bien entendu la 
valeur de la n donnée et n variable doivent 
être, de même type. Cette assignation n°°% variable - 
n donnée est rendue possible grâce à un “pointeur 
de liste de données" qui passe d'une donnée à une autre 
au fur et à mesure de leur lecture. 


3.9.5 RESTORE 


Cet ordre permet de remettre le “pointeur de données" 
à sa position initiale. 


Exemple d'utilisation : 


5 READ A,B,A$ 

10 RESTORE 

15 READ A1,B1,A1S 

20 PRINT A,B,AS$,A1,B1,A1S 

25 DATA 1,0,"LE CHAPITRE EST FINI" 
30 END 


2.902 


3.10 CONCLUSIONS 


Au cours de ce long chapitre nous avons vu les ordres 
basic qui constitueront la charpente de vos programmes. 


Nous avons essayé de vous sensibiliser à certains 
aspects de la programmation et à certaines méthodes per- 
mettant d'améliorer vos programmes. Pour bien saisir 
toutes les possibilités de ces instructions, vous devrez 
vous armer d'un peu de patience et surtout vous entraîner 
à faire vos propres programmes. 


Dans les prochains chapitres vous allez apprendre à 
vous servir d'instructions plus distrayantes, permettant 
d'utiliser les possibilités graphiques et sonores de 
votre Oric. 


— 100 - 


CHAPITRE 4 


Possibilités 


graphiques 
de l'oric 





4.1 INTRODUCTION 


Au moment où vous entamez la lecture de ce chapitre, 
vous avez déjà amplement fait connaissance avec votre mi- 
croordinateur. Vous avez, en effet, appris à jouer et à 
converser avec votre machine ; vous avez également com- 
mencé à programmer, en utilisant le langage BASIC, ce qui 
vous permet d'ores et déjà de concevoir des programmes 
relativement élaborés. 


Pourtant il vous reste encore à découvrir toute la 
gamme de possibilités mise à votre disposition par Oric, 
et à compléter l'ensemble des commandes basic rencontrées 
jusqu'à présent. 


Votre microordinateur va en effet vous permettre de 
réaliser des graphiques simples, complexes, colorés, 
immobiles, mouvants, ou encore clignotants si vous le 
désirez. Il vous permettra également de construire des 
sons, ou même des morceaux de musique si vous êtes 
passionné de solfège. 


Inutile de préciser le parti que vous pouvez tirer de 
ces capacités sonores et graphiques pour améliorer la 
richesse et la variété de vos jeux, ou simplement agré- 
menter vos programmes par des couleurs ou des sons. 


— 101 - 


Nous commencerons par présenter les possibilités 
graphiques en définissant tout d'abord les divers modes 
graphiques que vous utiliserez, puis en passant en revue 
les commandes de chaque mode. 


4.2 LES MODES GRAPHIQUES 
On peut classer ces modes en deux groupes : 


Le premier est constitué par les modes graphiques 
basse résolution. 


le second groupe comprend le mode unique correspon- 
dant aux graphiques haute résolution. 


Nous allons préciser, dans les paragraphes suivants, 
les notions de mode,;et de haute ou basse résolution. 


4.2.1 Les modes basse résolution 


TEXT, LORES O0, LORES 1, sont les noms des trois modes 
graphiques composant le premier groupe. Vous connaissez 
très bien le premier d'entre eux : TEXT, puisque c'est 
celui que vous avez utilisé jusque là. 


Qu'est-ce qu'un mode graphique ? 


Un mode graphique, avec l'ensemble des commandes 
qu'il comprend, constitue une option qui conditionne la 
manière d'écrire ou de faire imprimer un point ou un ca- 
ractère sur l'écran. 


Décrivons le mode TEXT pour préciser davantage. Lors- 
que vous mettez Oric en marche, c'est ce mode qui appa- 
raît automatiquement. Comme vous l'avez remarqué, vous 
disposez, en mode TEXT, de la totalité de l'écran pour 
écrire vos programmes ou lancer vos ordres, hormis la 
première colonne sur laquelle vous ne pouvez pas écrire. 
Lorsque toutes les vingt-sept lignes de l'écran ont été 
utilisées, celles-ci défilent vers le haut, jusqu'à lais- 
ser apparaître une ligne libre en bas de l'écran. 


Jusqu'à présent, vous n'avez utilisé le mode TEXT que 


— 102 - 


pour des besoins d'écriture. Vous allez maintenant ap- 
prendre à vous en servir pour réaliser vos premiers des- 
sins, grâce aux commandes qui seront détaillées dans les 
paragraphes suivants. 


Mais auparavant, présentons les deux autres modes 
graphiques basse résolution : LORES 0 et LORES 1. 


On passe du mode TEXT au mode LORES O0 ou LORES 1 en 
tapant LORES O ou LORES 1 ; on repasse au mode TEXT en 
tapant TEXT. Le nom du mode peut donc être considéré com- 


me une commande permettant d'accéder à ce mode, commande 
qu'on peut utiliser dans un programme. 


Après avoir tapé : LORES 0, vous voyez l'écran se 
transformer. Vous constatez alors que le fond de l'écran 
devient noir à l'exception de la ligne du bas et des deux 
premières colonnes. Le curseur se trouve dans cette der- 
nière ligne. Si vous y écrivez, vous verrez la surface en 
fond noir diminuer au fur et à mesure que vous introdui- 
sez de nouvelles lignes. Les premières colonnes à gauche 


sont inaccessibles à l'écriture. 


Vous avez peut-être déjà tapé LORES 1. Là encore, 
l'écran se transforme de la même façon que pour LORES O0. 
Mais quoi que vous essayiez de taper, vous verrez appa- 
raître à la place des caractères attendus (et habituels) 
des blocs aux formes étranges. Vous venez de prendre 
contact avec la “forme alternée des caractères", et en 
même temps de mettre en évidence la seule différence 
entre les modes LORES O0 et LORES 1. 


Vous n'aviez jusqu'ici utilisé que la “form stan- 
dard” des caractères, à laquelle nous sommes tous habi- 
tués ; c'est celle que nous rencontrons en mode TEXT ou 
en mode LORES O0. 


Mais quelle que soit la représentation choisie : 
forme standard en mode TEXT ou LORES 0, ou forme alternée 
en mode LORES 1, les caractères ont toujours la même 
signification. Ainsi, l'ordre "PRINT", commun aux trois 
modes, exerce la même action en mode LORES 0 ou en mode 
LORES 1. 


En mode TEXT, la première colonne de gauche abrite un 


— 103 - 


paramètre contrôlant la couleur du fond de l'écran ; la 
seconde abrite un paramètre contrôlant la couleur de 
l'avant-plan, des caractères. En mode LORES (0 ou 1) 
apparaît un paramètre supplémentaire - contrôlant les 
formes standard ou alternées des caractères - qui est 
placé dans la première colonne de gauche. 


Il y a près d'une centaine de caractères (A, , ,S$, 
etc...). À chacun d'eux on peut associer une forme étran- 
ge, qui est la forme alternée du caractère. Le nombre et 
la variété de ces nouveaux caractères vous permettront de 
construire des dessins originaux en associant les blocs 
les uns aux autres. 


Comment obtenir la forme alternée d'un caractère 
standard, d'une manière simple et rapide ? L'instruction 
suivante vous le montre. 


PRINT 65, CHR$S(27);"1";CHR$S(65) 


Vous verrez alors s'imprimer 65 et plus loin un bloc 
correspondant au caractère alterné de A. En effet, 65 
représente le nombre code ASCII du caractère A. (ASCII 
pour American Standard Code for Information Interchange). 
Vous trouverez en annexe la liste des codes ASCII de tous 
les caractères ; ce sont des nombres compris entre 32 et 
125. La commande permettant d'obtenir le caractère cor- 
respondant à son nombre code est CHR$ ; ainsi CHR$(65 )=A. 


Vérifiez-le en tapant 
PRINT CHRS(65) 


La commande réciproque permettant d'obtenir le code 
ASCII d'un caractère est ASC : 


ASC("A")=65 


Mais 27 est inférieur à 32 : il ne représente donc 
pas un nombre code ASCII. Ici, 27 est un attribut, c'est- 
à-dire qu'on peut lui faire jouer un rôle particulier. 
Par exemple ici l'ensemble CHR$(2/7);"I" a pour action de 
sélectionner la forme alternée de CHR$S(65). Si vous sup- 
primez CHR$(27);"l"; et tapez : PRINT 65, CHR$(65), vous 
verrez À s'imprimer après 65. 


- 104 - 


Vous pouvez bien sûr remplacer 65 par tout autre nom- 
bre compris entre 32 et 125, mais vous devrez garder 
CHR$S(27);"1l". 


Exemple : PRINT 100, CHR$S(27);"I";CHR$(100) 


27 n'est pas le seul attribut pouvant être utilisé 
après CHR$. Les nombres entre 0 et 31 peuvent être consi- 
dérés comm attributs. 


Employés avec CHR$, ils ont surtout un intérêt pour 
les sorties sur imprimante. Ils permettent entre autre de 
choisir la grandeur des lettres, ou de faire avancer le 
papier, etc... Certains ont cependant une action sur les 
sorties écran ; tapez 


PRINT CHR$(12) 


Vous obtiendrez un résultat équivalent à celui de l'ordre 
CLS. 


Nous utiliserons par la suite CHR$ avec d'autres 
attributs en particulier 8 et 9. 


Nous n'avons fait, pour l'instant, que présenter les 
trois modes graphiques basse résolution. Il est temps 
d'entrer plus avant dans les détails. 


Commençons par expliciter le terme basse résolution. 


En mode LORES O0, et LORES L ou TEXT, l'écran est 
divisé en un certain nombre d'unités élémentaires : des 
cellules, qui constituent un quadrillage de cet écran. 
Ces cellules sont de petits carrés : il y en a 39 colon- 
nes verticales, et 27 lignes horizontales. 


26 IE 





Ces cellules, comme on peut le voir sur le schéma, 
sont numérotées de O à 38 dans le sens horizontal et de 0 
à 26 dans le sens vertical. 


— 105 - 


En fait, ce quadrillage peut servir à constituer un 
repère formé d'une origine et de deux axes. L'origine 
sera, par définition, le coin en haut et à gauche de 
l'écran, les deux axes seront x et y définis par le 
schéma 

x horizontal de gauche à droite ; 
y vertical de haut en bas. 


La cellule de coordonnées x et y dans ce repère est 
donc repérée par le couple (x,y) comme l'indique l'exem- 
ple sur le schéma. O<x <38, O<y <26, x et y sont 
comptés à partir de l'origine. 


La taille des cellules est telle qu'un caractère, 
quel qu'il soit, occupe exactement une cellule. 


Cette division de l'écran constitue ce que l'on ap- 
pelle la basse résolution. En effet il est possible de 
diviser l'écran beaucoup plus finement encore : c'est 
l'objet du mode haute résolution. 


4.2.2 Le mode haute résolution 


Il se nomme HIRES ; son nom, comme celui des autres 
modes, constitue une commande qui permet d'accéder à ce 
mode. 


Ayant tapé HIRES vous voyez alors le fond de l'écran 
devenir noir, mais constatez aussi qu'il reste au bas de 
l'écran trois lignes de mode TEXT. Ces trois lignes cons- 
tituent une fenêtre qui vous permet de formuler des com- 
mandes (et surtout de voir ce que vous écrivez), tout en 
ayant sous les yeux les dessins que vous êtes en train de 
tracer. 


Nous sommes en haute résolution : la division de 
l'écran en unités élémentaires est donc beaucoup plus 
fine qu'en basse résolution. Les cellules des modes TEXT 
et LORES sont devenues des pixels, c'est-à-dire des 
points, constituant l'élément graphique de base. 


Tapez : CURSET 120,100,1 (en mode HIRES) 
Vous verrez apparaître un point au centre de l'écran qui 
vous montrera ce qu'est un pixel. (Nous reviendrons bien 


sûr sur la commande CURSET tout-à-l'heure). 


— 106 - 


Horizontalement, l'écran est divisé en 240 pixels, 
tandis que verticalement, il est divisé en 200 pixels. En 
mode HIRES, tout l'écran est disponible en largeur pour 
l'impression des pixels. 


On peut là encore élaborer un repère à partir du 
maillage constitué par les pixels. L'origine est toujours 
le coin haut à gauche de l'écran, un axe x horizontal va 
de gauche à droite, un axe y vertical va de haut en bas. 


o4t3 239 
“.. 


Lignes en 
mode TEXT 





Les pixels sont numérotés de O0 à 239 horizontalement, et 
de O0 à 199 verticalement. 


Voici donc présenté ce mode haute résolution graphi- 
que. 


Si vous cherchez à comparer les divers modes graphi- 
ques, vous constaterez que TEXT et LORES O sont très 
proches l'un de l'autre. Nous avons vu ce qui différen- 
ciait LORES 1 de LORES O0. 


Quant au mode HIRES, nous pouvons dire qu'il n'a rien 
de commun avec les trois premiers, si ce n'est les trois 
lignes de mode TEXT. Nous verrons qu'également, au niveau 
des commandes, LORES O0, LORES 1 et TEXT sont assez voi- 
sins l'un de l'autre (les commandes diffèrent peu ou pas 
d'un mode à l'autre). 


Par contre le mode HIRES a des commandes qui lui sont 
spécifiques. 


Les premières commandes graphiques que l'on va intro- 
duire sont des commandes communes aux quatre modes TEXT, 
LORES O0, LORES 1 et HIRES. Elles concernent les couleurs. 


— 107 - 


On distingue les couleurs d'arrière-plan ou “papier” 
et les couleurs d'avant-plan : l'encre". Il y a donc 
deux commandes qui sont 


PAPER N 
et INK N 


où N est un nombre variable compris entre 0 et 7, qui 
contrôle la couleur, suivant le tableau suivant 


noir 
rouge 
vert 
jaune 
bleu 
nagenta 
cyan 
blanc 


YOU 5 &w ND © 


Essayez ces deux commandes, jusqu'à trouver les cou- 
leurs du fond d'écran, et les caractères qui vous con- 
viennent le mieux. Bien sûr, si l'encre et le papier sont 
de même couleur vous ne voyez plus rien. 


Tapez : 10 FOR A = O TO 7 
20 FOR B = 7 TO O STEP -1 
30 INK À : PAPER B 
40 WAIT 100 
50 NEXT B 
60 NEXT À 


4.3 LES COMMANDES GRAPHIQUES 


4.3.1 Commandes graphiques basse résolution 


La première commande rencontrée sera PLOT X,Y,A$. 
Utilisons-la tout de suite. 


Vous êtes en mode TEXT ou LORES O (ou LORES 1) 


Tapez 
PLOT 15,10,"BONJOUR" 


— 108 - 


En mode TEXT et LORES 0, BONJOUR va aller s'imprimer 
au milieu de l'écran, le caractère B occupant la cellule 
(15,10). En LORES 1, le résultat sera le même, mais 
BOUJOUR (comme d'ailleurs votre commande) sera écrit sous 
forme alternée. 


PLOT x,y,A$ placera donc le premier caractère de la 
chaîne A$ dans la cellule de coordonnées x, y. Attention 
à ne pas sortir de l'écran en donnant un x ou un y trop 
grand. Si vous tapez 


PLOT 10,10,"H" 


vous verrez apparaître un H sur l'écran. À la place d'une 
chaîne alphanumérique, on peut aussi mettre un nombre, 
pour le troisième argument de PLOT. Ainsi, tapez : 


H=65 
PLOT 15,10,H 


La caractère A apparaît, car 65 est le code ASCII de 
A. 


Voici un programme utilisant les formes alternées des 
caractères et la commande PLOT. Il s'agit d'un balayage 
horizontal de l'écran par des caractères de forme alter- 
née. Ceci montre l'importance de la commande PLOT, qui 
vous permet de placer facilement un caractère et de le 
faire évoluer sur l'écran, ce qui peut avoir un grand 
intérêt pour les jeux. 


1 REM *%** BALAYAGE *%% 
5 LORES 1 
6 A=0:C$=" " 
10 A$="61" 
20 REPEAT 
30 FOR B=0 TO 35 
40 PLOT B,A,A$ 
50 PLOT B,A,C$ 
60 NEXT B 
70 A=A+1 
80 FOR C=35 TO O STEP-1 
90 PLOT C,A,A$ 
100 PLOT C,A,C$ 
110 NEXT C 
120 A=A+1 
130 UNTIL A=26 


— 109 - 


Ce programme vous montre comment créer l'illusion du 
mouvement : voir les lignes 40 et 50, ou les lignes 90 et 
100. 


Si vous voulez avoir les caractères standard, rempla- 
cez en ligne 5 LORES 1 par LORES O. 


Si vous êtes exigeant au point de vouloir mélanger 
les deux types de caractères, vous en avez la possibili- 
té. Voyons comment. 


On utilise deux expressions qui ont une action réci- 
proque l'une sur l'autre. L'expression CHR$S(8) permet, 
lorsqu'on est en mode LORES 1, de faire apparaître des 
caractères standard. 


L'expression CHR$(9) permet, réciproquement, lors- 
qu'on se trouve en mode LORES 0, d'obtenir des caractères 
de type alterné. De plus, CHR$(9) peut servir, en LORES 
1, à revenir aux caractères de type alterné, après utili- 
sation de CHR$(8). 


De même, CHR$S(8) sert, en LORES 0, à retrouver les 
caractères de type standard après utilisation de CHR$(9). 
(Souvenez-vous que pour x< 31, CHR$(x) exerce une action 
particulière, et ne donne un caractère que pour x >32, x 
étant le nombre code ASCII de ce caractère). 


Comment utilise-t-on CHR$S(8) et CHR$(9) dans la pra- 
tique ? 


Les manipulations suivantes fournissent la réponse. 


Tapez : 10 LORES 1 
20 A$=CHR$(8)+"BONJOUR"+CHRS(9) 
30 B$="LORES 1" 
40 PLOT 15,10,B$ 
50 PLOT 15,12 ,A$ 


puis : 10 LORES 0 
20 A$=CHR$S(9)+"BONJOUR"+CHRS(8) 
30 B$="LORES 0" 
40 PLOT 15,10,B$ 
50 PLOT 15,12,A$ 


— 110 - 


La concaténation (opération rencontrée aux lignes 
20), permet, lorsque l'on est en LORES 1 par exemple, de 
considérer à l'exécution de la commande PLOT 15,12,A$, la 
chaîne de caractères : BONJOUR, comme filtrée par CHR$(8) 
ce qui va la faire imprimer en caractères standard. L'im- 
pression de BONJOUR une fois réalisée, CHR$S(9) fait reve- 
nir à la forme originale. 


La seconde commande est SCRN(x,y). SCRN vient de 
SCREEN (écran en anglais). Son but est d'aider l'utilisa- 
teur à connaître le caractère qui occupe la cellule de 
coordonnées x, y sur l'écran. 


Ainsi, après avoir tapé CLS pour nettoyer l'écran, si 
vous effectuez la commande PLOT 10,15,"H", vous verrez 
bien sûr apparaître la lettre H dans la cellule de coor- 
données 10, 15. Tapez alors : 


PRINT SCRN(10,15) 


Le nombre 72 vous sera alors fourni ; c'est en effet 
le code ASCII du caractère H. 


Peut-être vous demandez-vous comment on peut utiliser 
cette commande. L'exemple qui suit vous montre les servi- 
ces qu'elle peut rendre dans un jeu. 


1 TEXT 
5 C$=" " 
10 FOR N=1 TO 8 
12 M=N+8 
20 PLOT 10,M,"O" 
30 NEXT N 
40 C=2 
50 A=INT(RND(1)*26) 
60 REPEAT 
70 PLOT C,A,"X" 
80 WAIT 4 
90 PLOT C,A,C$ 
100 IF SCRN(C+1,A)=79 THEN C=34 
110 C=C+1 
120 UNTIL C=35 
130 GOTO 40 


- 111 - 


A la ligne 100, 79 représente le code ASCII de O0. On 
utilise alors le résultat numérique fourni par SCRN pour 
tester si au coup suivant le "X" atteindra le "O0". 


Terminons ce paragraphe sur les commandes basse réso- 
lution par l'utilisation des couleurs, et des attributs. 


Tapez : 10 LORES O0 : F=0 
20 C=0:A=10:B=10 
30 R=10:D=2*P1/50 
40 REPEAT 
50 PLOT A+R*SIN(C) ,B+R*COS(C) ,18+F 
60 C=C+D:IF C >2%*PI THEN F=1 
70 UNTIL C >4%PI 


Commentaires : 

La ligne 30 définit D comme l'incrément de l'angle 
dont on tourne pour placer les cellules les unes après 
les autres. La ligne 20 définit le centre du cercle par À 
et B, et le rayon par R. La ligne 50 choisit les couleurs 


des diverses cellules ; nous reviendrons sur ce point. 


D doit être suffisamment grand pour qu'on puisse 
passer d'une cellule à la suivante assez rapidement. 


cellule 


centre D 


Mais surtout, il ne doit pas être trop grand, sinon les 
cellules ne seront plus jointives. 


cellule 
centre 
cellule 


D'autre part, x=A+R*sin(C) a peu de chances d'être en- 
tier. Comment la commande PLOT va-t-elle interprêter ces 
coordonnées non entières ? Elle va simplement choisir la 
cellule correspondant à INT(x),INT(y). C'est-à-dire que 
PLOT x,y,'A" est équivalent à PLOT INT(x),INT(y),"A". 
Vérifiez-le sur plusieurs exemples. 


— 112 - 


Parlons maintenant des couleurs et attributs. Vous le 
constatez : grâce à ce programme, on peut faire interve- 
nir la couleur après la commande PLOT, par le choix des 
attributs de couleur. Les attributs considérés dans le 
programme contrôlent la couleur du papier (de la cellu- 
le). Ils sont alors compris entre 16 et 23, c'est-à-dire 
qu'ils valent 16+N, N variant de O0 à 7. Les attributs 


D 


correspondant à l'encre varient de O à 7. 


En mode LORES, la commande PLOT suivie d'un ordre de 
couleur, ne colorie qu'une cellule : tapez 


LORES O 
PLOT 10,15,20 


Si par les commandes INK ou PAPER vous changez l'encre ou 
le papier, vous ne changerez pas la couleur de cette 
cellule, et le fond - en LORES - restera toujours noir. 


Mais en mode TEXT, PLOT suivi d'un attribut de cou- 
leur, colore la cellule choisie, mais également toute la 


4 


ligne ou partie de ligne à droite de cette cellule. 


Tapez : TEXT : PAPER 7 
PLOT 15,15,17 
PLOT 20,15,23 


Vous pouvez ainsi obtenir des surfaces quelconques 
colorées comme vous le voulez. Ici encore les ordres 
PAPER ou INK ne changent pas la couleur des cellules que 
vous avez colorées. Mais d'autres commandes PLOT sur ces 
cellules en changent bien sûr la couleur. 

Les attributs de couleur sont donc les nombres de 0 à 
7 pour l'encre, et de 16 à 23 pour le papier. Tous les 
attributs sont compris entre O0 et 31. Vous trouverez en 
annexe H leur liste et leur action. Mais montrons le rôle 
de l'attribut 12 tout de suite à titre d'exemple. 


Tapez : 1 TEXT 
5 FOR N=1 TO 24 
10 PRINT “TEXTE POUR REMPLIR L'ECRAN" 
20 NEXT N 
30 PLOT 10,10,5 
40 PLOT 11,11,18 
50 PLOT 12,12,12 


- 113 - 


Vous constatez que l'attribut 12 produit un clignote- 
ment. Vous constatez également que les attributs n'affec- 
tent que les cellules situées à leur droite, et qu'une 
cellule est affectée par la commande PLOT + ATTRIBUT, 


située la première à sa gauche. 
Enfin si vous tapez 


LORES 0 
PLOT 10,10,19.1 


Bien que 19.1 ne soit pas entier, la commande fonction- 
nera néanmoins 3; là encore, elle équivaudra à PLOT 
10,10,INT(19.1). 


4.3.2 Commandes du mode HIRES 
Pour obtenir ce mode, il suffit de taper : HIRES. 


La première commande va nous faire découvrir le 
curseur HIRES. Cette commande est CURSET X,Y,FB. En 
tapant CURSET 120,100,1 vous verrez alors apparaître un 
point au centre de l'écran : c'est le curseur HIRES. X,Y 
sont les coordonnées du pixel, du point de l'image repé- 
rant le curseur. Pour la commande CURSET, elles seront 
toujours repérées par rapport au coin haut et gauche de 
l'écran. 


Le troisième paramètre intervenant dans l'ordre CUR- 
SET est le nombre code FB (pour Foreground, Background). 
11 a quatre valeurs, c'est-à-dire : 


FB = O0 couleur du fond (ou du papier des lignes 
TEXT de la fenêtre) 
1 couleur de l'encre 
2 inversion des couleurs 
3 sans effet 


FB conditionne la manière dont sera imprimé le cur- 
seur sur l'écran. Pour voir l'effet de ce nombre code, 
tapez : 

HIRES 

CURSET 120,100,1 
CURSET 120,150,2 
CURSET 120,50,3 
CURSET 100,100,0 


- 114 - 


A cette commande CURSET, on peut associer une comman- 
de de même type : CURMOV X,Y,FB. La seule différence avec 
CURSET, c'est que pour CURMOV, X et Y sont les coordon- 
nées relatives à la dernière position du curseur. 


Tapez : HIRES 
CURSET 120,100,1 
CURMOV 10,10,1 


pour obtenir confirmation. 


Attention à ne pas sortir de l'écran (Oric vous 
enverrait un message d'erreur) : si À et B sont les coor- 
données de la dernière position du curseur, on doit 
respecter 


0 £& X+A < 239 
0 < Y+B < 199 


On peut bien sûr tracer des traits avec CURSET ou 
CURMOV mais cela oblige à placer le curseur successive- 
ment sur tous les points du trait. 


Il existe une commande simple permettant de tracer un 
segment de droite : c'est l'ordre DRAW X,Y,FB. Il permet 
de tracer un trait à partir de la dernière position du 
curseur, jusqu'au point A+X, B+Y (si A et B étaient les 
coordonnées de la dernière position du curseur). DRAW 
déplace le curseur qui occupe désormais la position AK, 
B+Y. 


Exemple d'utilisation : 


10 HIRES 

20 CURSET 120,50,3 
30 DRAW -50,50,1 
40 DRAW 50,50, 1 

50 DRAW 50,-50,1 
60 DRAW -50,-50,1 


Améliorons encore nos possibilités en passant à la 
commande PATTERN. 


PATTERN est un mot anglais signifiant modèle, ce qui 
va prendre tout son sens. 


= 115 


Nous venons d'utiliser la commande DRAW, en ne tra- 
çant que des traits continus. Vous voulez tracer facile- 
ment et rapidement des traits mixtes ou pointillés ? Rien 
de plus facile. 


Avant tout, nous devons nous souvenir qu'Oric “pense” 
en binaire, c'est-à-dire uniquement avec des 0 ou des 1 
groupés par huit, formant alors un octet. 


Un octet peut donc représenter des nombres allant de: 


00000000 11111111 (binaire) 


pe 


0 255 (décimal) 


C'est cette disposition de 0 ou de 1 à la suite les 
uns des autres qui permet d'obtenir des traits interrom- 
pus. Vous pouvez utiliser pour cela tout nombre entre 0 
et 255 ; le trait obtenu sera interrompu selon la repré- 
sentation binaire de ce nombre. Ainsi si vous tapez : 


1 HIRES 

5 CURSET 60,30,1 
10 PATTERN 15 
20 DRAW 120,0,1 


15 en binaire s'écrit 00001111 


Examinons le résultat obtenu. Vous constatez que les 
quatre premiers points du trait ne sont pas imprimés, que 
les quatre suivants le sont, et ainsi de suite. 


Les quatre premiers points correspondent aux quatre 0 
par lesquels commence le nombre 15 en binaire. 


Les quatre suivants, vous l'avez compris, correspon- 
dent aux quatre L par lesquels finit le nombre 15 en 
binaire. 


Si vous remplacez 15 par 170 - qui en binaire s'écrit 
10101010, - vous obtiendrez des pointillés plus serrés. 


Lorsque vous mettez Oric en marche, c'est le nombre 


modèle 255 qui est sélectionné ; c'est pourquoi vous tra- 
cez des traits pleins avec DRAVW. 


— 116 - 


Pour le moment, en mode HIRES, vous n'avez pu faire 
imprimer des caractères que dans les trois lignes de mode 
TEXT du bas de l'écran. Or, il existe une commande qui va 
vous permettre de placer un caractère (ou plusieurs) sur 
la partie haute résolution de l'écran, à l'endroit qui 
vous plaît. 


Cette commande est CHAR X,S,FB. 


Vous êtes en mode HIRES. En tapant encore HIRES, vous 
enlevez de l'écran tous les dessins qui s'y trouvaient. 
Tapez alors CURSET 120,100,1 : vous voyez le curseur 
HIRES se placer au centre de l'écran. Tapez maintenant 
CHAR 65,0,1 : vous voyez alors la lettre "A" s'imprimer 
au milieu de l'écran, là où se trouve le curseur HIRES. 


Avant d'employer CHAR, vous devez donc choisir, par 
la commande CURSET, l'endroit de l'écran où vous désirez 
faire afficher un caractère. Puis, vous déterminez les 
trois paramètres X,A,FB qui suivent l'ordre CHAR. 


X est le code ASCII du caractère que vous voulez fai- 
re imprimer ; ASC("A")=65. 


S vaut O0 ou 1. Le O0 correspond à la forme standard 
des caractères, le 1 à la forme alternée. 


FB est le nombre paramètre déjà rencontré dans les 
commandes CURSET, CURMOV ou DRAW, qui contrôle les cou- 
leurs. 


Voici un programme, qui vous montre comment utiliser 
la commande CHAR. 


10 HIRES 

20 A$="BONJOUR" 

30 CURSET 30,30,3 

40 FOR N=1 TO 3 

50 READ X,Y 

60 FOR A=1 TO LEN(A$) 

70 CHAR ASC(MIDS(AS,A,1),0,1) 
80 CURMOV X,Y,0 

90 NEXT A 

100 NEXT N 

110 DATA 10,10,0,10,10,-10 


OUPS 


LEN est une fonction donnant la longueur d'une chaîne 
de caractères : LEN(AS). 


MID$S(A$,A,L) ne considère les caractères de la chaîne 
A$ qu'à partir du Aième et au nombre de L. Si A$= 
"BONJOUR" MIDS(A$,3,2) équivaut à : NJ. 


La commande que nous allons maintenant étudier va 
vous permettre de tracer des cercles très facilement. 


Elle se présente comme suit : CIRCLE R,FB. 
R est un paramètre correspondant au rayon du cercle. 


FB est le nombre paramètre contrôlant les couleurs 
déjà rencontré. Pour tracer un cercle, vous devez con- 
naître l'emplacement de son centre, et la valeur de son 
rayon. 


Vous pouvez déterminer la position du centre par la 
commande CURSET. 


Ainsi, si vous tapez 


HIRES 
CURSET 120,100,3 
CIRCLE 50,1 


Vous obtiendrez un cercle de rayon 60, dont le centre a 
pour coordonnées 120 et 100. Attention à bien choisir la 
position du centre et la valeur du rayon, afin de ne pas 
sortir de l'écran. 


Vos cercles sont tracés en trait plein. Mais comme 
pour la commande DRAW, vous pouvez faire intervenir la 
commande PATTERN pour obtenir des cercles en traits 
interrompus. 


10 HIRES 
20 CURSET 120,100,3 

30 FOR X=49 TO 1 STEP-2 
40 CIRCLE X, 1 

50 INK INT(X/7) 

60 PATTERN 50-X 

70 NEXT X 


— 118 - 


La commande suivante : POINT permet de déterminer si 
un point, un pixel de l'écran est imprimé dans la couleur 
de l'encre de l'arrière-plan, du papier, ou dans celle de 
l'avant plan. 


Si vous êtes passé du mode HIRES en mode TEXT, vos 
dessins haute résolution ont bien sûr disparu, mais ils 
sont cependant conservés dans la mémoire de l'écran. 


Pour les enlever de la mémoire, vous devez taper NEW. 
Revenons au mode HIRES. Tapez : 


HIRES 
CURSET 50,50,0 


Tapez maintenant 


TEXT 
PRINT POINT(50,50) 


Oric vous répond O0 puisqu'en effet le curseur était 
imprimé dans la couleur du fond de l'écran (ou du pa- 
pier). Si en mode HIRES, vous aviez tapé CURSET 50,50,1 


c'est-à-dire si vous aviez fait imprimer le curseur dans 
la couleur de l'encre, alors une fois revenu en mode TEXT 


PRINT POINT(50,50) 
vous aurait fourni comme réponse : -l (et non pas 1). 


Passons maintenant à la commande la plus riche, sans 
doute la plus performante, mais aussi la plus complexe. 
11 s'agit de la commande FILL A,B,X. 


Elle vous permet de remplir une portion de l'écran 
(déterminée par vous) dans la couleur que vous avez choi- 
sie. Ou encore, elle vous permet de faire clignoter les 
dessins se trouvant dans une certaine région de l'écran. 
Elle peut encore faire bien d'autres choses, et vous 
découvrirez l'ensemble de ses innombrables possibilités à 
l'usage. 


FILL est suivi de trois paramètres A,B,X. 
À correspond au nombre de lignes horizontales. En 


mode HIRES, il y a 200 lignes de pixels. 


= 119% 


À est un paramètre qui contrôle le nombre de lignes 
sur lequel FILL va agir. De même B est un paramètre con- 
trôlant le nombre de colonnes sur lequel va agir cette 
commande. 

Quant à X, c'est le paramètre qui sert à obtenir la 
nature de l'effet cherché : couleur, clignotement, etc... 


Voici un petit programme qui dispose des couleurs à 
l'aide de cette commande. 


5 HIRES 
10 FOR N=1 TO 22 
20 FILL 3,1,17 
21 FILL 3,1,18 
22 FILL 3,1,19 
24 NEXT N 


Montrons d'abord le rôle du paramètre A. 


Tapez : HIRES 
FILL 10,1,17 
FILL 30,1,18 


Vous constatez deux choses 


10 lignes se remplissent de rouge à la première com- 
mande FILL ; 

30 lignes se remplissent de vert à la seconde comman- 
de FILL. 


À contrôle donc bien le nombre de lignes sur lesquelles 
va agir FILL. 


Vous remarquez ensuite que le curseur HIRES se dépla- 
ce lorsque vous donnez l'ordre FILL. En effet initiale- 
ment, il était en (0,0) puis après le ler ordre FILL, il 
est venu se positionner en (0,10), pour alors remplir les 
lignes 10 à 40 de vert. 


Tapez : CURSET 60,50,1 
FILL 30,1,22 
FILL 10,1,21 


Cette fois, l'ordre FILL n'agit qu'à partir de la 
position du curseur qui vient se repositionner sur la 


même verticale lorsque l'ordre FILL est accompli, mais en 


— 120 - 


se décalant vers le bas du nombre de lignes modifiées par 
l'ordre FILL. 


Cependant, si vous tapez 


CURSET 120,50,1 
CURSET 123,50,1 
FILL 10,1,17 


vous constaterez que la commande FILL n'affecte l'écran 
qu'à partir de la première position du curseur. Cette 
remarque nous permet d'introduire le rôle du paramètre B. 


Il faut considérer que, sur une ligne, il y a 240 
points (ou pixels) rangés par blocs de 6 ; il y a donc 40 
de ces blocs. La commande FILL n'agit pas sur un pixel 
isolé ; en fait elle exerce son action par blocs de 6 
pixels. 


Pour cela, si vous positionnez votre curseur au 
hasard sur l'écran, l'ordre FILL agira à partir de la 
coordonnée horizontale, multiple de 6, qui précède la 
position réelle du curseur. C'est ce que vous a montré le 
dernier exemple proposé. 


Pour confirmation, tapez : 


10 HIRES 
20 CURSET 120,100, 1 

30 FOR N = 1 TO 25 STEP 1 
40 FILL 1,1,18 

50 CURSET 120-N, 100+N, 1 
60 NEXT N 


Ainsi, au lieu d'apparaître sur une oblique, l'impression 
des couleurs va être disposée en escalier. Nous verrons 
tout à l'heure comment obtenir une oblique. 


Tapez : HIRES 
FILL 10,1,63 
FILL 10,2,63 
FILL 10,5,63 


Vous voyez apparaître, suivant l'ordre FILL considéré, 1, 
2 ou 5 blocs (occupant 6 pixels en largeur). C'est bien 
sûr le paramètre B qui sert à changer le nombre de ces 


blocs. 


- 121 


Cependant, pour les couleurs, B ne joue aucun rôle. 


HIRES 
FILL 10,2,22 
FILL 10,15,19 


Toute la ligne se colore à partir du curseur. 


Les deux premiers paramètres ont donc été présentés. 
Attention à ne pas choisir A trop grand (vous sortiriez 
de l'écran), et à 1e pas prendre non plus des valeurs de 
B trop importantes : si vous êtes à l'extrême gauche de 
l'écran, B peut valoir au maximum 40 (il y a 240 = 6x40 
pixels sur une ligne). 


Passons maintenant au dernier paramètre : X. 


Pour O0 £X $<127, vous obtiendrez toute la gamme de 


possibilités mise à votre disposition par la commande 
FILL. 


Entre 128 et 255 vous retrouverez les mêmes possibi- 
lités. Nous n'aurons besoin que de X <127 pour ce para- 
graphe. En effet Oric, par la commande FILL, ne tient 
compte que des 6 premiers chiffres de X (en représenta- 
tion binaire). Or de 128 à 255, il faut 7 bits (Ooul) 
pour représenter X en binaire. 


Entre O0 et 31,X est un attribut. 
De O0 à 7, il contrôle la couleur de l'encre 


HIRES 

CURSET 120,100,1 
CIRCLE 95,1 

FILL 95,1,1 


Vous voyez alors un quart du cercle devenir rouge. 


De 8 à 15, X permet de passer aux caractères de forme 
alternée (s'il y a des caractères sur l'écran en partie 
haute résolution), ou bien de faire clignoter, ou encore 
d'imprimer les caractères en les doublant sur une verti- 
cale. Par exemple X = 12 fait clignoter. 


— 122 - 


Tapez : HIRES 
CURSET 120,100,0 
CIRCLE 95,1 
CURSET 0,0,0 
FILL 198,1,12 


De 16 à 23, X contrôle la couleur du papier : 


HIRES 
FILL 10,1,21 


De 24 à 31, X dérègle la synchronisation du balayage 
de l'écran. Vous retrouverez l'action des attributs en 
annexe. 


Si X >32, X n'est plus un attribut, il devient un 
modèle (PATTERN) et ce jusqu'à 127. 


Tapez : HIRES 
FILL 10,1,100 
FILL 10,1,42 


En binaire 100 s'écrit 1100100 
42 s'écrit 0101010 


FILL imprime les pixels correspondant aux L et non ceux 
correspondant aux 0. Mais comme le travail s'effectue par 
blocs de 6 pixels, seuls les 6 premiers bits à partir de 
la droite composant le nombre seront pris en compte. 
Ainsi pour 100, FILL lira 100100. 


C'est précisément cette notion de modèle qui va nous 
permettre d'obtenir la disposition en oblique des régions 
affectées par la commande FILL. 


HIRES 

CURSET 120,100,1 
FILL 1,1,65 

FILL 1,1,67 

FILL: 1, 1,71 

FILL 1,1,79 

FILL 1,1,95 

FILL 1,1,127 


puis CURSET 120,100,1 
FILL 10,1,1 


— 123 - 


11 est impossible de passer en revue toutes les 
caractéristiques offertes par cette commande, mais voici 
un aperçu de quelques propriétés que vous complèterez, 
par expérimentation, selon vos besoins. 


Les commandes PAPER ou INK annulent l'action des 
attributs contrôlant le papier ou l'encre. 


HIRES 
FILL 20,10,20 
PAPER 4 


Un FILL colorant le papier (16 XK<23) est effacé par 


un ordre FILL ayant un paramètre X compris entre 0 et 
127. 


HIRES 

CURSET 0,0, 1 
FILL. 10, 1,22 
CURSET 0,0,1 
FILL 10,3,63 


Pour X compris entre 32 et 127, vous obtenez des 
blocs de pixels sur lesquels vous pouvez effectuer des 
changements d'encre : 


HIRES 
FILL 10,5,100 
INK 4 : PAPER 1 


Vous constatez que le premier bloc ne change pas de 


couleur, que le second disparaît et que c'est seulement à 
partir du 3ème bloc que la couleur de l'encre change. 


De plus le changement de couleur de papier supprime 
le premier bloc. Maintenant si vous tapez 


HIRES 
CURSET 0,0,1 
FILL 10,5,63 
CURSET 0,0,1 
FILL 10,1,22 


Vous voyez que seul le premier bloc (issu de la première 
commande FILL) se colore sous l'action d'un ordre FILL 
comportant un attribut de couleur de papier. Les autres 
blocs ne changent pas. 


- 124 - 


Voici un programme, montrant à la fois l'action des 
divers paramètres X, qui concluera ce paragraphe sur la 
commande FILL. 

10 HIRES 

20 FOR À = 1 TO 128 

30 IF A>23 AND A < 32 THEN60 

40 CURSET RND(1)*100+1,RDN(1)*100 +1,1 
50 FILL RND(1)%60+1,1,A 

60 NEXT A 


Cela vous montre d'ailleurs, qu'il n'est pas nécessaire 
de fournir des paramètres entiers. CURSET, comm FILL, 
travailleront avec la partie entière. 


A vous maintenant d'entreprendre vos propres manipu- 
lations pour maîtriser et comprendre l'action des diver- 
ses commandes du mode HIRES. 


Pour terminer cette partie sur les commandes, indi- 
quons comment on peut obtenir certains effets spéciaux en 
mode LORES ou TEXT. - 


Par exemple, on peut faire imprimer les caractères en 
double hauteur. Faites [CTRL] [D]. Tout ce que vous écri- 
rez sera désormais doublé en hauteur. Pour annuler cet 
effet, tapez [CTRL] [D]. Vous pouvez obtenir le même ef- 
fet en tapant 


PRINT CHR$(4) 


Vous trouverez en annexe la liste des caractères de 
contrôle et de leur action (nous venons de voir celle du 
caractère de contrôle D) Vous pouvez également faire cli- 
gnoter des caractères en utilisant le petit programme 
suivant 

5 INK 1 

10 PRINT CHRS(12) 
20 PRINT CHRS(27);"N BONJOUR" 
30 PRINT CHR$(27);'"N BONJOUR" 


La ligne 20 comporte l'instruction produisant le cligno- 
tement. On retrouve l'expression CHR$(27) rencontrée dans 
un paragraphe précédent. Cette fois elle est couplée à la 
lettre N, comme l'indique la ligne 20. 


La ligne 10 est équivalente à CLS ; elle est indispen- 
sable pour la bonne exécution du programme. Vérifiez-le 


en la supprimant. 
— 125 - 


Nous avons 
vait également 


Tapez : l 
2 
5 

10 

20 

30 


déjà vu que par la commande PLOT on pou- 
obtenir un clignotement. 


CLS 


TEXT 


FOR N=1 TO 24 
PRINT "TEXTE CLIGNOTANT" 
NEXT N 

PLOT 5,12,12 


Voici un programme qui va faire intervenir quelques- 
unes des commandes étudiées précédemment et qui va clore 


en le résumant 
consacrée aux c 


10 
20 


270 
500 
510 
520 


par un dessin, cette partie du chapitre 
ommandes. 


HIRES 
X=40 

CURSET 80,100 ,3 

PAPER 6 : INK 1 

STP =2*PI/40 

F = 0 

REPEAT 

DRAW X#*COS(F),-X*SIN(F), 1 

DRAW -X*SIN(F),-X*XCOS(F),1 
DRAW -X#COS(F),X*SIN(F), 1 

DRAW X*SIN(F),X*COS(F), 1 
F=F+STP 

X = Xx-1 

UNTIL F >2*PI 

CURSET 120,80,1 

REPEAT 

READ A,B 

DRAW A,B,1 

UNTIL B=0 

CURSET 170,40,3 

DRAW 10,-10,1 

CURSET 160,20 ,3 

FOR N=1 TO 10 

READ L 

CHAR L,0,1 

CURMOV 7,0,3 

NEXT N 

DATA 50,10,-20,-20,-100,-20,60 
DATA -40,20,10,70,10,-20,0 
DATA 69,78,32,65,86,65,78,84,32,33 


— 126 - 


GRAPHIQUES AVANCES 


Si vous vous reportez à l'annexe G décrivant la carte 
mémoire d'Oric, vous vous apercevrez que les caractères 
standard ou alternés sont stockés dans la mémoire vive 


(ou RAM) d'Oric. On peut donc accéder à l'endroit de la 
mémoire où sont rangés ces caractères. 


En fait toutes les informations servant à définir un 
caractère sont rangées par octet (groupe de 8 bits 0 ou 
1). Il faut 8 octets pour décrire le caractère. À chacun 
de ces octets correspond un nombre, qui est l'adresse de 
l'octet et qui permet de le repérer dans la mémoire. 


Un caractère occupera donc 8 adresses dans la mémoi- 
re. L'ensemble des adresses est compris entre les nombres 
46080 et 47104, soit 1024 adresses, ce qui correspond 
bien à 128 caractères 128 x 8 = 1024. 


Les 8 octets définissant un même caractère ont des 
adresses successives. Ainsi À est contenu dans les octets 
ayant les adresses : 


46600 00001000 ) 

46601 00010100 ) 

46602 00100010) 

46603 00100010) 8 octets définissant A 
46604 00111110 ) 

46605 00100010) 

46606 00100010 ) 

46607 00000000 ) 

adresses 


Vous voyez que la disposition des 1 parmi les 0 forme 
l'image d'un A. A l'impression, Oric fera correspondre 
les 1 à de l'encre et les O0 à du blanc. 


Les caractères sont rangés dans l'ordre de leur code 
ASCII. Ainsi le caractère @ dont le code ASCII est 64 
est stocké entre les adresses 46080 + (64 * 8) et 46599 = 
46080 + (64 * 8) + 7. A, dont le code ASCII est 65, est 
stocké aux adresses suivant 46599, soit de 46600 à 46607 
(ou de 46080 + (65 * 8) à 46080 + (65 * 8) +7). 


- 127 - 


Nous allons maintenant prendre connaissance de deux 
commandes, qui permettent pour la première, de voir ce 
qu'il y a en mémoire à telle ou telle adresse, et pour la 
seconde de modifier ce qu'il y a en mémoire. 


À l'adresse 46600 est rangé le premier octet définis- 
sant le caractère À ; il vaut en binaire 00001000, soit 8 
en décimal. C'est pourquoi, si vous tapez PRINT PEEK 
(46600), vous obtiendrez : 8. 


PEEK, suivi du nombre adresse de l'octet, vous four- 
nit donc le contenu de cet octet (en décimal), et peut 
donc vous permettre de savoir quels sont les octets 
stockés à n'importe quelle adresse. 


POKE vous permet de modifier l'octet rangé à une cer- 
taine adresse K. 


Si vous tapez POKE 46600,15 vous vous apercevrez que 
vous avez modifié la forme géométrique du caractère A, en 
modifiant la valeur d'un octet définissant ce caractère. 


46600 : 00001000 est devenu 
46600 : 00001111 


et la variation géométrique de A correspond à la varia- 
tion de la disposition des 1 dans l'octet 46600. 


Vous avez donc maintenant la possibilité de trans- 
former tous les caractères à votre guise. Si vous avez de 
la patience et du talent vous pourrez même obtenir un 
alphabet gothique ou russe. Et si la fantaisie vous en 
prend, vous pouvez même supprimer tous les caractères en 
tapant POKE K,0 pour K allant de 46080 à 47104. 


Précisons, cependant, qu'après POKE la valeur décima- 
le de l'octet que vous introduisez doit être comprise 
entre 0 et 63, ce qui correspond en binaire aux nombres 
de 6 bits au plus (de O0 à 111111). 


En effet, pour tous les caractères, seuls les six 
derniers bits de chaque octet définissant le caractère, 
contiennent les informations géométriques servant à 
dessiner ce caractère. 


— 128 - 


Voici maintenant un programme qui va vous être très 
utile pour redéfinir le caractère de votre choix comme 


vous le désirez. 


l 
10 
20 
30 


40 
50 
60 
70 
90 


REM *** MODIFICATIONS DE CARACTERES *** 
CLS 

DIM X(8):DIM Y(8,8):DIM L(8) 

PRINT "ENTREZ LE CARACTERE QUE”, 

"VOUS SOUHAITEZ MODIFIER" 

GET A$ 

PRINT A$ 

C = ASC (AS) 

A = 46080 : D = C * 8 

GOSUB 1000 


100 PRINT “ENTREZ HUIT NOMBRES" 

110 PRINT “(UN PAR LIGNE)" 

120 PRINT “COMPOSES CHACUN DE" 

122 PRINT "SIX ZEROS OU UNS" 

130 FOR N = O TO 7 

150 INPUT X(N) 

160 FOR P = 6 TO 1 STEP -1 

170 LA = INT(X(N)/(10T(P-1))) 

180 X(N) = X(N)-(10T(P-1)) * LA 

190 L(N) = L(N)+LA*(2T(P-1)) 

200 NEXT P 

210 X(N) = L(N) 

220 POKE(A+D+N),X(N) 

230 NEXT N 

240 GOSUB 1000 

250 STOP 

1000 REM *** SUB.MODIF.CARAC. *** 

1010 FOR N = O TO 7 

1020 X(N) = PEEK (A+D+N) 
1030 FOR M = O TO 7 

1040 Y(N,M) = INT(X(N)/27(7-M)) 
1050 Z = ((X(N)Î2 (7-M))-Y(N,M))*21(7-M) 
1060 X(N) = Z+0.0001 
1080 IFY(N,M)= O THEN POKE 48220+(N*40)+M, 32 
1090 IFY(N,M)= 1 THEN POKE 48220+(N*40 )M,128 
1100 NEXT M 

1110 NEXT N 
1120 RETURN 

Commentaires : 
Le tableau à deux dimensions : Y(8,8) va stocker un 


caractère (sous forme de 8 octets). 


— 129 - 


Le tableau à une dimension X(8) va décrire successi- 
vement chaque octet. 


On demande tout d'abord de rentrer un caractère 
(celui que vous souhaitez modifier). On cherche alors 
l'adresse mémoire de ce caractère grâce à son code ASCII. 


Vous introduisez ensuite 8 nombres binaires repré- 
sentant (écrits les uns au dessus des autres) par la 
disposition des l1, la nouvelle géométrie du caractère. 


Ces nombres binaires seront alors traduits en déci- 
mal, avant d'aller modifier (par POKE) les anciens oc- 
tets. 


Les lignes 1080 et 1090 font afficher le nouveau 
caractère (à grande échelle) sur l'écran. 


32 (caractère blanc) correspondant ici 


0 
et 128 (bloc plein) correspondant ici 1 


à 
| 
à 

Mais les adresses mémoire ne concernent pas unique- 
ment les caractères. Elles concernent aussi les adresses 


liées à l'écran ; chaque région de l'écran correspond à 
une adresse mémoire. 


Si vous vous reportez à la carte mémoire d'Oric, vous 
trouverez les adresses mémoires concernant les lieux géo- 
métriques de l'écran, en mode TEXT et en mode HIRES. Il y 
en a beaucoup plus en mode HIRES, parce que la résolution 
est plus fine dans ce mode et que l'on a besoin de davan- 
tage d'adresses pour se repérer. 


Nous allons utiliser ces adresses tout-à-l'heure. 

Auparavant, il est nécessaire de reparler des attri- 
buts que nous avons déjà rencontrés pour les commandes 
PLOT (en mode TEXT ou LORES) et FILL (en mode HIRES). 

Ces attributs, dont le rôle est défini en annexe, 
sont toujours compris entre O0 et 31 et ont les mêms 
actions, utilisés avec la commande POKE, ou avec les 


commandes PLOT et FILL. 


Tapez par exemple 


— 130 - 


10 FOR N + 1 TO 24 

20 PRINT "TEXTE POUR REMPLIR L'ECRAN" 
30 NEXT N 

50 POKE 48162,12 


Vous voyez alors une ligne clignoter. 48162 est une 
adresse mémoire correspondant au lieu de l'écran où le 
clignotement apparaît, et 12 est l'attribut qui provoque 
le clignotement. 


Dans le programme ci-dessus, vous pouvez changer cet 
attribut et vérifier que son action, lorsqu'il varie de 0 
à 31, concorde avec celle décrite par les annexes. 


Si dans la ligne 50 vous changez 48162 en 48200, vous 
constaterez que l'action de l'attribut se décale d'une 


ligne vers le bas. 


En effet, en mode TEXT ou LORES, il y a 40 cellules 
par ligne et à chacune d'elle correspond une adresse. 
Pour changer de ligne il faut donc ajouter 40 à l'adresse 
mémoire. 


adresse J 
—+ ligne I 


+ ligne I +1 


adresse 
J + 40 





De même, en mode HIRES, nous avons vu avec FILL que 


les pixels (les points) n'étaient pas pris en compte 
individuellement, mais qu'Oric les considérait groupés 


par bloc de six. 


Comme il y a 240 pixels par ligne, il y a 40 de ces 
blocs, et à chacun de ces blocs correspondra une adresse 
mémoire. 


Il y a donc, en mode HIRES, comme en mode LORES ou 
TEXT, 40 adresses mémoire par ligne. 


Tapez : HIRES 


POKE 41000,21 
POKE 41040, 22 


“131 := 


Mais les attributs ne constituent pas les seuls para- 
mêtres pouvant être placés après l'ordre POKE. 


En fait, un octet, de par la façon dont les 0 ou les 
1 qui le composent sont disposés, conditionne la manière 
de faire imprimer un caractère ou afficher une couleur 
sur l'écran. 


Suivant la forme binaire de ces octets, on a affaire 
à un attribut ou à un modèle (PATTERN) qui peut servir, 


4 


comme on l'a vu, à construire des traits interrompus. 


bit 7 | bit 6 | bit 5 se 4 Joue à | 2 se 2] 0 


Si les bits 5 et 6 sont tous les deux égaux à O0, 
alors l'octet sera lu comme un attribut. 





La valeur de cet attribut est donnée par les cinq 
derniers bits (4 à O0), c'est-à-dire qu'en binaire, les 
attributs sont compris entre 00000 et 11111, soit en 
décimal entre 0 et 31. 


Si par contre l'un des deux bits (5 ou 6) n'est pas 
nul, l'octet sera lu comme un modèle : le nombre modèle 
ayant pour valeur les six derniers bits (5 à 0) soit en 
décimal les valeurs 32 à 63. 


Ce sont ces nombres modèle que nous avons utilisés 
pour construire des traits interrompus avec DRAW, ou des- 
siner des blocs grâce à FILL. Nous avions utilisé des 
modèles supérieurs à 63, mais en fait ces nombres supé- 
rieurs à 63 ont plus de 6 chiffres en représentation 
binaire. 


Pour FILL, par exemple, seuls comptaient les six pre- 
miers O ou 1 du nombre (en binaire). Et avec six O ou 1, 
on ne peut dépasser 63. 

Les sept premiers bits permettent de construire des 
nombres binaires allant jusqu'à 127, soit 01111111 en 


binaire. 


Le bit 7 est resté égal à O0 jusque là. Si on le prend 


= 132:- 


égal à l, on passe alors à des nombres supérieurs à 127, 
allant jusqu'à 255. Le bit 7 égal à 1 va produire une 
inversion des caractères, comme vous allez le voir 
maintenant. 


Les petits programmes suivants vont nous montrer 
quelle est l'action des divers octets après l'ordre POKE, 
qu'ils soient considérés comme attributs ou non. 


10 FOR N = 1 TO 24 

20 PRINT "TEXTE POUR REMPLIR L'ECRAN" 
30 NEXT N 

40 FOR X = O TO 31 

50 POKE 48202,X 

55 WAIT 25 

60 NEXT X 


Attention, les attributs 24 à 31 dérèglent la syn- 
chronisation de l'écran. 


Passez maintenant aux octets suivants, en remplaçant la 
ligne 40 par : 


FOR X = 32 TO 127 
puis faites exécuter à nouveau le programme. 


Enfin remplaçons, pour terminer la démonstration, la 
ligne 40 par : 


FOR X = 128 TO 255 


Par POKE, vous pouvez affecter un attribut à un 
endroit particulier de l'écran. 


Il exerce alors son action sur toutes les cellules 
situées à sa droite. Et une cellule est affectée par 
l'attribut situé à sa gauche : c'est le premier attribut 
rencontré à sa gauche qui prédomine. 


Que ce soit en mode TEXT ou HIRES, vous devez donc 
placer l'attribut à la gauche de la cellule dont vous 
voulez modifier la couleur de l'encre, du papier, ou dont 
vous voulez faire clignoter le caractère qui s'y trouve. 


— 133 - 


Tapez : HIRES 
POKE 48039,1 
POKE 48040,64 
POKE 48039,12 


Le programme suivant vous montre une utilisation de 
POKE pour séparer l'écran en deux : une zone choisie par 
avance peut avoir une couleur d'encre fixe et bien déter- 
minée, alors que l'autre zone peut avoir une couleur 
d'encre variable. 


On choisit des attributs de couleur d'encre au hasard 
qu'on place par POKE aux adresses 40960 + K*40, K allant 
de O0 à 200. Ces adresses correspondent à l'extrême gauche 
de toutes les lignes disponibles en haute résolution. 


Pour chacune de ces adresses, on place un attribut de 
couleur d'encre bien déterminé l'adresse en question 
augmentée de 100, c'est-à-dire la moitié de l'écran, 
deux lignes plus bas. 


à 
« 
à 


adresse 
adresse + 40 


adresse + 80 


adresse + 100 





gauche de droite de 
l'écran l'écran 
1 HIRES 


10 FOR X = 40960 TO 49079 STEP 40 
30 POKE X, INT (RND(2)*7+1) 

40 POKE X + 100,2 

50 NEXT X 

60 CURSET 120,100,0 

70 FOR N = 96 TO 1 STEP -5 

80 CIRCLE N,1 

90 NEXT N 


- 134 - 


CHAPITRE D 


Les sons 


et l'oric 





5.1 INTRODUCTION 


Votre Oric contient quelques commandes sonores parti- 
culièrement sophistiquées utilisant un circuit spécial 
qui peut synthétiser trois sons différents, qu'ils soient 
purs ou mélangés à un bruit. 


Vous avez déjà fait l'expérience de quelques-uns des 
sons disponibles sur Oric. Chaque fois que vous pressez 
une touche, Oric produit un bip sonore aigu. Si vous 
pressez sur [RETURN] ou n'importe quelle touche de con- 
trôle, vous entendrez un bip plus grave. Si vous voulez 
supprimer les sons produits par les touches du clavier, 
il vous suffit d'appuyer en même temps sur les touches 
[CTRL] et [F]. Ces sons seront restitués si vous appuyez 
à nouveau simultanément sur [CTRL] et [F]. 


Oric offre des sons prédéfinis pour les jeux (guerre 
de l'espace...). Il permet aussi de simuler un modèle 
réduit de clavier de piano, etc... Etudions maintenant 
toutes ses possibilités sonores. 


— 135 - 


5.2 LES SONS PREDEFINIS 


Quatre sons sont préenregistrés. Il s'agit de ZAP, 
PING, SHOOT et EXPLODE, lesquels peuvent être obtenus 
très facilement. Ecrivez ZAP sur le clavier, puis appuyez 
sur la touche [RETURN], vous entendrez une décharge sif- 
flante qui reproduit le son d'un pistolet galactique à 
laser. Maintenant, entrez de la même façon PING, vous 
obtiendrez une sonnerie qui peut d'ailleurs être directe- 
ment produite en appuyant à la fois sur [CTRL] et [G]. 
SHOOT, quant à elle, est une commande simulant le tir 
d'un pistolet terrien à poudre. Enfin EXPLODE produit... 
une explosion. 


Ces quatre sons prédéfinis vous seront très utiles 
pour le bruitage des jeux d'action que vous programmerez. 
Ils peuvent être inclus dans des programmes comme n'im- 
porte quelle autre commande basic. 


Par exemple : 


10 FOR N = 1 TO 10 
20 ZAP 

30 WAIT 5 

40 NEXT N 


produira une salve de ZAP, imitant une mitrailleuse ga- 
lactique. 


Vous pouvez remarquer qu'à la ligne 30, on a intro- 
duit une pause grâce à l'instruction WAIT 5. Ceci permet 
au son de finir avant qu'un autre ZAP ne débute. La durée 
du silence à mettre dépend en fait de celle du son. Un 


temps de pause inférieur à la durée d'exécution du son 
n'a aucun effet et le son produit sera continu. 


Mais passons aux principales commandes de son. 


5.3 LES COMMANDES DE SON 


Les commandes de son sont au nombre de trois. Il s'a- 
git de SOUND, MUSIC et PLAY. Les deux premières servent à 
définir la nature du son (son pur ou mélangé à un bruit) 
et sa hauteur, tandis que la troisième contrôle l'exécu- 
tion sonore (timbre, durée d'exécution, volume). 


— 136 - 


Ces commandes nécessiteront un certain temps avant de 
vous devenir familières, mais elles vous donneront la 
possibilité de composer de la musique comme sur n'importe 
quel instrument existant. De plus, du bruit peut être 
ajouté pour imiter le son des bombes, des avions... etc. 
Vous verrez que les possibilités de sonorisation ne sont 
en fait limitées que par votre imagination et ne sont pas 
aussi compliquées qu'elles peuvent apparaître à première 
vue. 


Mais avant de passer au détail des commandes de son, 
je vous propose ce petit programme de musique aléatoire 
qui vous donnera une idée des sons que l'on peut obtenir 
sur Oric. Pour arrêter son exécution, il vous suffira 
d'appuyer simultanément sur les touches [CTRL] et [C]. 


5 REM ** MUSIQUE ALEATOIRE ** 
10 MUSIC 1, RND(1) * 6, RND(1) * 12 + 1, 7 + 
RND(1) * 8 
20 WAIT RND(1) * 20 + 5 
30 GOTO 10 


Pour comprendre l'exécution de ce programme, il vous 
suffit de vous reporter aux explications concernant la 


commande MUSIC. 


Mais examinons maintenant le détail des trois comman- 
des sonores SOUND, MUSIC et PLAY. 


5.3.1 SOUND (canal, période, volume) 


Cette commande vous permet d'obtenir un son dont vous 
fixerez la période et le volume et qui sera exécuté tel 
quel ou bien mélangé à un bruit suivant le canal choisi. 
La commande comporte trois paramètres qui doivent être 
numériques (sinon la commande ne pourra être exécutée). 
Regardons-les en détail : 


— LE CANAL 


Ce paramètre peut prendre 6 valeurs, de 1 à 6. Si 
vous choisissez une des trois premières valeurs : 1, 2 ou 
3, le son qui sera produit sera un son pur, défini par 
les paramètres période et volume qui suivent. 


— 137 - 


Si vous choisissez pour canal la valeur 4, 5 ou 6, vous 
produirez à l'exécution sonore, le son pur auquel 
s'ajoutera un bruit, toujours le même. L'avantage de 
disposer de 3 canaux de sons purs ou de sons mélangés à 
un bruit, est de pouvoir ainsi définir simultanément 
plusieurs sons (trois au plus) qui pourront être 
synthétisés par la commande PLAY, que nous verrons 
ultérieurement. 


— LA PERIODE 


Ce paramètre mesure la période de vibration de la no- 
te et commande de fait la hauteur du son produit. Plus la 
période est faible, plus la note est aiguë ; plus la pé- 
riode est élevée, plus la note est grave. 


— LE VOLUME 


Ce paramètre mesure évidemment l'intensité sonore à 
l'exécution. Il peut prendre 15 valeurs de 1 à 15, le vo- 
lume 1 désignant l'intensité la plus faible. A moins que 
vous n'utilisiez un amplificateur Hi-Fi externe, vous 
trouverez probablement que les volumes 6 et 7 sont ample- 
ment suffisants. 


REMARQUE : Vous pouvez mettre le volume à la 
valeur zéro. A ce moment-là l'exécution sonore du 
son, défini par sa période et rangé dans un canal 
déterminé, sera assurée par la commande PLAY suivante 


à condition que celle-ci renvoie au canal où a été 
placé le son. 


En pratiquant les commandes sonores d'Oric, vous vous 
rendrez compte qu'il est plus commode d'utiliser SOUND 
seulement pour définir le son et de le faire exécuter 
ensuite par PLAY. Il en découle que le volume dans SOUND 
sera souvent mis à 0. 


5.3.2 MUSIC (canal, octave, note, volume) 


La commande MUSIC diffère de SOUND par le fait qu'au 
lieu de définir un son par sa période de vibration, elle 
définit une note de musique par le nom qu'elle porte et 
l'octave où elle se trouve. La commande MUSIC vous permet 


— 138 - 


donc de créer des sons purs d'une hauteur déterminée, 
correspondant tout simplement aux notes de la gamme. 


— LE PARAMETRE CANAL ne peut prendre que les valeurs 1, 2 
ou 3 qui produisent des sons purs. La commande MUSIC ne 
peut pas mélanger une note à un bruit ! 


— LE PARAMETRE OCTAVE peut prendre 8 valeurs de 0 à 7, la 
valeur O0 donnant l'octave le plus grave. Ce nombre d'oc- 
taves permet de couvrir largement le clavier classique 
d'un piano. 


— LE PARAMETRE NOTE peut prendre 12 valeurs de 1 à 12, et 
la correspondance avec les notes de la gamme est la sui- 
vante : 


do 

do # ou ré b 
ré 

ré # ou mi b 
mi 

fa 

fa # ou sol b 
: sol 

: sol# ou la b 
10 : la 

11 : la # ou si b 
12 : si 


. 0e °° ee 


© © JO Uni & Y D H 


soit encore, en reproduisant le clavier du piano : 


è 4 7 9 411 





— 139 - 


— LE PARAMETRE VOLUME varie comme pour SOUND de 1 à 15. 
La mise à zéro du volum entraîne, comme pour SOUND, 
l'exécution de la note par une commande PLAY qui vient 
après. 


Pour essayer cette commande MUSIC, je vous propose de 
monter les notes de la troisième octave. Ce programme 
vous permettra d'utiliser votre Oric comme un instrument 
à clavier puisque, enfoncées, les douze premières touches 
de la ligne supérieure de votre clavier produiront les 
notes correspondantes. Les neuf premières touches mar- 
quées de 1 à 9 produiront les notes de do à sol , de 1/2 
ton en 1/2 ton, et les trois touches suivantes (“0", “-" 
et “"=") compléteront la gamme jusqu'à si. 


En appuyant sur “/", vous interromprez le programme. 


5 REM ** ESSAI DU CLAVIER ** 
10 PLAY 0, O0, O0, O 


20 GET A$ 

30 A = VAL(AS) 

4O IF A$ = “-" THEN A = 11 

50 IF A$ = "=" THEN A = 12 

60 IF A$ = “/" THEN PLAY 0, O, O0, O : STOP 
70 IF A$ = “O" THEN À = 10 

80 MUSIC 1, 3, À, 10 

90 WAIT 10 

100 GOTO 10 


Ce programme appelle quelques commentaires. La ligne 
20 attend une saisie au clavier, la ligne 30 lit la va- 
leur entrée et l'introduit dans la variable A. Si vous 
avez entré un chiffre (1 à 9), A aura la valeur de ce 
chiffre ; si vous avez entré autre chose, alors À est mis 
automatiquement à zéro. Les lignes 40 à 60 convertissent 
les touches aux valeurs requises. La ligne 70 rejette la 
valeur zéro pour A car MUSIC ne peut l'accepter. La ligne 
90 commande la durée d'exécution du son puisqu'elle fait 
attendre 100 ms l'exécution du programme, durant lesquel- 
les la note définie par MUSIC est exécutée. Au bout de 
ces 100 ms, on passe à l'instruction suivante PLAY O0, O0, 
0, O qui arrête l'exécution sonore. Si elle n'y était 
pas, la note aurait continué à jouer jusqu'à ce que vous 
ayez appuyé sur une nouvelle touche. 


Retenez cette instruction PLAY 0, O0, 0, O qui sert 
souvent. 


- 140 - 


Ce petit programme vous montre que l'exécution d'un 
son en utilisant seulement MUSIC nécessite les instruc- 
tions WAIT et PLAY 0,0,0,0. 


Cela aurait été la même chose avec SOUND. Pour faci- 
liter l'exécution de sons quelconques ou de notes, on 
utilise donc plutôt la commande PLAY. 


5.3.3 PLAY (combinaison des canaux de son pur, combinai- 
son des canaux avec bruit, mode de sortie sonore, 
période) 


Avant de passer au détail des paramètres de cette 
commande, rappelons qu'avant PLAY ont dû être définis par 
SOUND ou MUSIC des sons ou des notes rangés dans des 
canaux et dont le paramètre volume a été mis à zéro. 


— LE PARAMETRE COMBINAISON DES CANAUX DE SON PUR va com- 
biner entre eux les canaux de sons purs où se trouvent 
des notes ou sons purs. Il peut prendre huit valeurs de O 
à 7 dont la signification est la suivante : 


0 : aucun canal de son pur n'est branché en 
sortie 

1 : le canal 1 est branché en sortie 

223 le canal 2 est branché en sortie 

3.5 les canaux 1 et 2 sont branchés en sortie 

& : le canal 3 est branché en sortie 

5 : les canaux 3 et 1 sont branchés en sortie 

6 : les canaux 3 et 2 sont branchés en sortie 

173 les canaux 1, 2 et 3 sont branchés en sortie 


— LE PARAMETRE DE COMBINAISON DES CANAUX AVEC BRUIT va 
combiner entre eux les canaux 4, 
des sons mélangés à un bruit. 


5 et 6 qui contiennent 


Les valeurs de ce paramètre sont similaires au para- 
mêtre de combinaison des canaux purs. 


0 : aucun canal de son mélangé n'est branché en 
sortie 

1 : le canal 4 est branché en sortie 

2 : le canal 5 est branché en sortie 

3 : les canaux 4 et 5 sont branchés en sortie 


- 141 - 


le canal 6 est branché en sortie 

les canaux 6 et 4 sont branchés en sortie 
les canaux 6 et 5 sont branchés en sortie 
les canaux 4, 5 et 6 sont branchés en sortie 


SOU 


— LE MODE DE SORTIE 


Le troisième paramètre de PLAY va définir le mode de 
sortie sonore. Sept modes de sorties numérotées de 1 à 7 
sont disponibles. Il peuvent être schématisés comme suit. 


L': 


he 
2 : D] 
RINNRN 
C SR A 
CRE RE HSE 
s  CAAMAA 
7— 


Ce paramètre permet de créer des sons légèrement mon- 
tants ou descendants, continus ou oscillants. Ces carac- 
tères sont plus ou moins marqués suivant la valeur prise 
par le quatrième et dernier paramètre de PLAY. 


— LA DUREE DU SON 


Le quatrième paramètre de PLAY est un chiffre allant 
de O0 à 32767. Ce chiffre contrôle la durée du son de la 
façon suivante. Si le mode de sortie n'est pas périodique 
(modes de sortie 1, 2, 5, 7), il mesure simplement la 
durée du son et plus cette durée est grande, plus le ca- 
ractère montant ou descendant du mode de sortie en ques- 
tion sera accusé. Par contre, si le mode de sortie est 
périodique (modes 3, 4, 6), le paramètre mesure alors la 
période du mode de sortie (à ne pas confondre avec la pé- 
riode propre du son, liée à sa hauteur). Dans ces cas de 
sorties, plus le paramètre est élevé, plus la période est 
étalée et plus les variations sonores s'entendent bien. 


— 142 - 


En fait ces modes de sortie vous deviendront d'autant 
plus familiers que vous les pratiquerez. Pour commencer 
votre apprentissage, je vous propose ce petit programme 
qui vous permet de manipuler les paramètres mode de sor- 
tie et période sur la note la : 


5 REM ** ESSAIS DE SORTIE DU LA ** 

10 INPUT “ENTREZ LE MODE DE SORTIE DE 1 à 7"; M 
20 IF M < 100R M > 7 THEN 10 

30 INPUT “ENTREZ LA PERIODE DE O A 32767"; P 

40 IF P < O OR P = 32767 THEN 30 

50 MUSIC 1, 3, 10, O 

60 PLAY 1, 0, M, P 

70 PRINT “APPUYEZ SUR RETURN SI LE SON CONTINUE" 
80 GOTO 10 


Vous interromprez ce programme en appuyant sur [CTRL] 
et [C]. 


L'intérêt de la commande PLAY tient dans ces possibi- 
lités de sortie mais surtout dans le fait qu'elle peut 
synthétiser jusqu'à 3 sons purs et 3 sons mélangés à un 
bruit. 


Ainsi : 10 MUSIC 1, 3, 1, 10 
20 MUSIC 2, 3, 5, 10 
30 MUSIC 3, 3, 8, 10 
40 PLAY 7, O, 1, 500 
50 WAIT 600 
60 PLAY 0, 0, O0, O 


produit l'accord do, mi, sol. 


Pour terminer ce chapitre, voici une petite mélodie 
qui vous montrera une façon de rentrer les notes et leur 
durées grâce aux instructions DATA : 


10 REM ** MELODIE ** 
20 FOR N = 1 TO 11 

30 READ À, B 

40 MUSIC 2, 3, À, O 
50 PLAY 3, O0, 7, 2000 
60 WAIT B 

70 PLAY 0, 0, 0, O 
80 NEXT N 

90 DATA 5, 30, 5, 30, 7, 30, 8, 75, 5, 75, 8, 60 
100 DATA 10, 30, 7, 60, 5, 30, 3, 30, 5, 180 


- 143 - 


A) 


B) 
c) 
D) 


E) 


F) 
G) 


H) 


ANNEXES 


Récapitulation des fonctions et commandes 
au Basic 


Les messages d'erreur 
Utilisation d'une cassette 
Utilisation d'une imprimante 


Numérotation hexadécimale, représentation 
des nombres 


Tableau des codes ASCII 
Carte mémoire d'Oric 


Rôle des attributs 


- 144 - 


p 145 
p 171 
p 178 


pl8l 


p 183 
p 187 
p 188 


p 189 


Annexe À : RECAPITULATIF DES FONCTIONS ET 


DES COMMANDES DU BASIC DE L'ORIC 


Rappelons, avant de commencer, ce qui distingue une 
fonction d'une commande. 


Une commande est constituée d'un mot-clé éventuelle- 
ment suivi par un ou plusieurs paramètres séparés par des 
virgules, tandis qu'une fonction est constituée d'un mot- 
clé qui est le nom de la fonction, obligatoirement suivi 
par une ou plusieurs variables appelées arguments de la 
fonction, séparés par des virgules et placés entre paren- 
thèses. Une commande va exécuter une chose bien précise 
en fonction des valeurs des paramètres données. 


Par exemple tapez : 


N=1 
PAPER N 


Cela crée un fond rouge pour l'écran. PAPER est le 
nom de la commande et N son paramètre, qui vaut ici 1. 


a 


Une commande qui est employée à l'intérieur d'un 
programme prend le nom d'instruction du programme. 


- 145 - 


Une fonction, elle, va calculer une grandeur à partir 
des valeurs de ses variables au moment où elle est appe- 
lée. Une fonction peut être considérée comme une commande 
n'exécutant que des calculs. 


Par exemple, la fonction racine carrée sera définie 
par SQR(X) (SQR est l'abréviation de square root : racine 
carrée). SQR est le mot-clé désignant la fonction racine 
carrée, X est l'argument de cette fonction, c'est-à-dire 
dans notre exemple, une variable numérique dont la valeur 
doit être positive, car SQR(X) est définie par SQR(X) * 
SQR(X) = X qui ne peut jamais être négatif car le produit 
d'un nombre par lui-même, i.e. son carré, est toujours 
positif. 


L'utilité d'une fonction est de calculer des valeurs 
et d'assigner ces valeurs à des variables dans un pro- 
gramme. Prenons l'exemple suivant : 


CE 
10 A = SQR(X) 
15 ?A 


Notez que ?A signifie PRINT À et que ce programme 
produit V2 = 1,414... 


Le nom de la variable aurait pu être Y au lieu de X, 
cela n'aurait rien changé. Ce qui compte, c'est de 
fournir à cette variable une valeur satisfaisante. En 
l'occurence un nombre (et non pas une chaîne de carac- 
tères, par exemple) obligatoirement positif. Par contre, 
le nom de la fonction, c'est-à-dire les trois lettres de 
SQR, doit être scrupuleusement respecté. 


Pour chacune des fonctions et commandes que nous 
allons maintenant récapituler, nous allons donc vous 
signaler leur signification pratique, la liste des argu- 
ments ou des paramètres éventuels, la nature de ceux-ci 
et leur domaine de définition, puis vous donner un exem- 
ple illustrant la syntaxe d'emploi. 


- 146 - 


1) ABS(X) 


Cette fonction fournit la valeur absolue de l'argu- 
ment X qui peut être une variable numérique quelconque 
comprise entre -1,7 10 et 1,7 10 . Si X est posi- 
tif, ABS(X) est égal à X et si X est négatif, ABS(X) est 
égal à -X. Dans tous les cas, ABS(X) retourne toujours 
une valeur positive ou nulle. 


Le petit programme suivant : 


5 X = 4 
10 Y = ABS(X) 
15 Z = ABS(-4) 
20 W= Y-Z 
25 ?W 


fournira la valeur nulle, car Y et Z valant tous deux 4, 
leur différence W est nulle. 


2) ASC(A$) 


L'argument de cette fonction est obligatoirement une 
chaîne de caractères, c'est pour s'en rappeler qu'il est 
noté A$. Cette fonction ASC retourne la valeur du code 
ASCII du premier caractère de cette chaîne de caractères 
A$. 


Rappelons que le code ASCII est un code de représen- 
tation interne à Oric de chaque caractère alphanumérique 


par un nombre binaire occupant la place d'un octet. La 
fonction ASC va donc se contenter de décoder le ler octet 
de la chaîne de caractère fournie et de donner sa valeur 
décimale. La correspondance entre les valeurs décimales 
de ces octets et ce qu'ils représentent est donnée dans 
l'annexe F fournissant le code ASCII. 


Prenons l'exemple d'utilisation suivant 


5 A$ = "coucou" 
10 PRINT ASC(AS$) 


ou encore en mode direct ?ASC("coucou") donnera la valeur 
en code ASCII de la lettre C, à savoir 67. 


- 147 - 


3) ATN(X) 


Cette fonction est la fonction arctangente, dont l'ar- 

8 
gumgnt X est un nombre compris entre -1,7 10 et 1,7 * 
10° . L'argument X de cette fonction représente la 
tangente d'un angle dont ATN(X) représente justement la 
valeur exprimée en radians et comprises entre -A/2 et/2 


Pour mémoire, sur le cercle 
trigonométrique de rayon OA 
unité, la longueur du segment 
AB représente la valeur de la 
tangente de l'angle Ü . Si B 
est au-dessus de A, la tangen- 
te est positive et l'arc Ü a 
une valeur comprise entre 0 
(angle nul) et #1/2 (angle 
droit). Si B est en-dessous de 
A, Ô a une valeur comprise en- 
tre -7/2 et O et la tangente 
est négative. 





4) CALL X 


Cette commande, utilisée dans un programme, indique 
que la suite du programme qui se trouve à l'adresse mé- 
moire numérotée X est écrite en code machine. On revien- 
dra au BASIC dès que l'on trouvera l'instruction RTS. 


5) CHAR X, S, F, B 


Cette commande ne peut être utilisée qu'en mode 
HIRES. Elle consiste à dessiner un caractère à l'endroit 
où se trouve le curseur ; plus précisément le sommet en 
haut à gauche du caratère se trouvera à l'emplacement du 
curseur. Les trois paramètres qui suivent CHAR sont les 


suivants : 

- X désigne le code ASCII du caractère à dessiner. 
C'est donc un variable numérique comprise entre 32 et 128 
(cf code ASCII en annexe F). 

- $ est un paramètre pouvant prendre 2 valeurs : O ou 


1. 


- 148 - 


La valeur O0 correspond au type courant d'impression 
tandis que la valeur L produira l'autre type d'impression 
type dit alterné, i.e. l'impression de formes géométri- 
ques permettant le dessin stylisé. 


. FB est un code d'impression qui peut prendre les 4 
valeurs suivantes : 


O':: l'impression est faite dans la couleur du 
fond (numéro de PAPER) ; on ne voit donc rien 
mais il y a eu impression. 


1: l'impression est faite dans la couleur de 
l'encre (numéro de INK). 


2:32 inversion des couleur s. 
3.3 aucune impression n'est faite. 


Par exemple, après être passé en mode HIRES, vous 
tapez 


CHAR 67, O, 1 


Cela produira la lettre C (codée par 67) en haut à gauche 
de l'écran. Si vous aviez tapé 1 à la place de 0, vous 
auriez eu Æ qui est le caractère de l'autre type d'im- 
pression correspondant à C. 


6) CHRS(X) 


Cette fonction retourne le caractère dont le code 
ASCII est X. L'argument X de cette fonction est un nombre 
compris entre 32 et 128. Les fonctions ASC et CHR$ sont 
inverses l'une de l'autre. 


Pour vous en convaincre tapez 
5 INPUT "CODE ASCII 32 A 128";Xx 
10 A$ = CHRS(X) 
15 B = ASC(AS$) 
20 PRINT X,'"=",B 


où CHR$ et ASC pris successivement ne produisent rien. 


- 149 - 


Pour X <31, PRINT CHR$(X) exerce une action particu- 
lière qui est à rapprocher de l'action de la touche 
[CTRL] enfoncée simultanément avec la Xième lettre de 
l'alphabet. Ainsi, CHR$(4) provoque la même chose que 
[CTRL] [D], à savoir l'écriture sur 2 lignes à la fois. 


7) CIRCLE R,FB 

Cette commande ne peut être utilisée qu'en mode 
HIRES. Elle consiste à dessiner un cercle centré sur la 
position du curseur dont le rayon R est une variable 
numérique comprise entre 1l et 119. FB est le code 
d'impression vu pour CHAR. 

En mode HIRES, lancez par RUN le mini-programme : 


5 CURSET 100,100, 1 
10 CIRCLE 50,1 


Il vous dessinera une cercle au milieu de l'écran. Vous 
pourrez remarquer que la commande ne fonctionne pas si 
une partie du cercle quitte l'écran. 
8) CLEAR 

Cette commande met toutes les variables à zéro et 
vide les chaînes de caractères. 
9) CLOAD "XX" 


Commande de chargement d'un programme enregistré sur 
cassette. Une fois lu, le programme précédent est perdu. 


Exemple : 


CLOAD"TARZAN " 


10) CONT 
Cette commande continue l'exécution d'un programme 


après une interruption (opérée par [CTRL] et [C] ou par 
STOP ). 


— 150 - 


Si durant l'interruption des modifications ont été appor- 
tées (notamment correction d'instruction DIM), l'exécu- 
tion du programme peut ne pas reprendre par CONT. Essayez 
alors un GOTO numéroté, sinon relancez l'exécution au 
début du programme. 


11) COS(X) 


Cette fonction est la fonction cosinus dont l'argu- 
ment X est un nombre représentant la valeur exprimée en 
radians de l'angle dont COS(X) est le cosinus. 


Pour mémoire, sur le cercle 
trigonométrique unité, OC 
représente le cosinus de l'an- 
gle 0 compris entre L et O0 
tant que C reste entre A et O, 
et compris entre 0 et -1 dès 
que C passe entre O et A". 





Exemple : 


5 X = 1.5707963 
10 ? COS(X) 


donnera 0, car X vaut T/2. 


12) CURMOV X,Y,FB 


Cette commande place le curseur à une nouvelle posi- 
tion définie par ses coordonnées X et Y relatives à 
l'ancienne position. FB est le code d'impression vu pour 
CHAR. 


Cette commande ne peut être utilisée qu'en mode 
HIRES. 
13) CURSET X,Y,FB 

Cette commande place le curseur à la position définie 
par les coordonnées absolues X et Y, avec X compris entre 
0 et 239, et Y compris entre 0 et 199. 


FB est le code d'impression déjà vu pour CHAR. 


— 151 - 


14) CSAVE "XX" 


Cette commande préserve le fichier portant le nom XX 
pour l'enregistrer sur une cassette. 


15) DATA 

Cette instruction est suivie par une liste de cons- 
tantes aussi bien numériques qu'alphanumériques et qui 
sont stockées dans l'ordre d'écriture et seront lues dans 
le même ordre par des instructions READ. Cette instruc- 
tion ne peut être employée qu'en mode différé. Les cons- 
tantes qui suivent doivent impérativement être séparées 
par des virgules. 


Exemple : 
5 READ A,B,C,D$ 
10 DATA 1,2,3,"NOUS IRONS AU BOIS" 
15 PRINT A,B,C,D$ 
16) DEEK (X) 


Cette fonction retourne le contenu d'une octet plus 
256 fois le contenu de l'octet suivant. 


Exemple : 


?DEEK(4062) 


17) DEF FN 

Cette instruction définit pour l'utilisateur une 
fonction numérique à une variable en faisant suivre DEF 
FN du nom de la fonction, de l'argument placé entre paren- 
thèses, du signe égal suivi de l'expression analytique de 
la fonction. 

Exemple 


10 DEF FNAA(X)=A*X+B 


définit la fonction axtb. 


— 152 - 


18) DEF USR 


Cette instruction permet de définir l'adresse en 
mémoire du début d'un programme écrit en code machine. 


Exemple : 


DEF USR = #400 


19) DIM 


Cette instruction dimensionne tous les tableaux d'un 
programme, qu'ils contiennent des nombres ou des caractè- 
res alphanumériques. En pratique, cette instruction fixe 
les valeurs entières maximales que peuvent prendre les 
divers indices de tableaux. Le mot-clé DIM est suivi de 
la liste des noms de tableaux et de leur(s) dimension(s), 
chaque groupe étant obligatoirement séparé par des virgu- 
les. 


Notez qu'il est interdit de dimensionner deux fois le 
même tableau à l'intérieur d'un programme mais un tableau 
non-dimensionné est implicitement dimensionné à 10 1li- 


gnes. 


Exemple : 
DIM A(5,10),B(4,2),C$(8) 


ou encore : 10 INPUT N 
20 DIM E(N,3) 


20) DOKE X,V 


Cette instruction range en mémoire la valeur V aux 
adressses de mémoire X et X+1 de la façon suivante. La 
partie entière de V/256 va à l'adresse X+1, et le reste à 
l'adresse X. 


21) DRAW X,Y,FB 


En mode HIRES, cette commande dessine un segment de 
droite dont l'origine est la position du curseur et l'ex- 
trémité le point de coordonnée X,Y mesurées à partir de 
l'origine du segment dessiné. 


— 153 - 


FB est toujours le code de représentation vu pour 
CHAR. 
22) END 

Cette instruction termine un programme. Elle est 
facultative si l'instruction END se trouve à la fin du 
programme. 
23) EXP(X) 

Cette fonction calcule l'exponentielle de l'argument 

» » X ! 
X, notée ggthémat iquement e *« L'argument X varie entre 
-1,7 10 ebgl7 10 tandis que la fonction varie 
de O0 à 1,7 10° . 
?EXP (0) 


donnera ll 


24) EXPLODE 


Cette commande produit un son prédéfini ressemblant à 
une explosion. 


25) FALSE 


Cette instruction donne la valeur nulle au résultat 
d'un test logique. 


Par exemple le test logiqueA=(B=C) vaut 1 si B=C, et 
vaut 0 si B est différent de C. Si l'on a écrit A=FALSE, 


cela signifie que le test logique sera mis forcément à sa 
valeur nulle. 


26) FILL B,A,N 

Cette commande n'est utilisable qu'en mode HIRES, et 
a pour fonction de traiter graphiquement une partie de 
l'écran : 
. B désigne le nombre de lignes traitées (de O à 199) ; 


- 154 - 


. À désigne le nombre de blocs de six colonnes traités 
(de 0 à 40) ; 


. N est un paramètre de traitement graphique (de 0 à 
127). De O à 31, N est un attribut et de 32 à 127 N est 
un modèle (pattern). 


Pour plus de détails, s'en rapporter au chapitre des 
commandes graphiques élaborées. 


27) FN 


Ce mot-clé permet de manipuler le résultat d'une 
fonction prédéfinie. 


Exemple : 
PRINT FNSA(3) 
écrit la valeur de la fonction SA(3). 
28) FOR...TO 
STEP /NEXT 
Cette instruction crée une boucle qui répète les 
lignes du programme comprises entre FOR et NEXT. STEP 


détermine la taille de l'incrément et est pris égal à 1 
par omission. 


Exemple : 
10 FOR I = 1 TO 10 STEP 2 
20 PRINT I 
30 NEXT I 
29) FRE(X) 


Quelle que soit la valeur de l'argument, cette fonc- 
tion fournit le nombre d'octets disponibles, ce qui donne 
une idée de la taille mémoire libre à ce moment. 

Exemple : 


?FRE(0) 


SrL95E 


30) GET 


Cette commande ne fonctionne qu'en mode différé. Elle 
attend qu'une touche quelconque du clavier soit pressée 
et prend en compte ce qui est tapé sans qu'on ait besoin 
de taper sur RETURN, ce qui différencie GET de INPUT. 


L'emploi classique de GET consite à l'associer à 
l'instruction VAL ainsi : 


10 GET A$ 
20 A = VAL(A$) 


ce qui permet de manipuler ensuite non plus des chaînes 
de caractères numériques mais des variavle numériques. 


Notez que [CTRL] [C] est considéré comme caractère 
alphanumérique et ne peut pas interrompre le programme 
exécutant une instruction GET. 


31) GOSUB N 


Cette commande provoque un branchement du programme à 
la ligne de numéro N où débute une série d'instructions 
se terminant par RETURN et formant un sous-programme 
(SUBROUTINE). 


Mais le GOSUB ne se contente pas d'être un GOTO numé- 
roté, il conserve aussi en mémoire l'adresse de la ligne 
qui le suit et à laquelle le programme reviendra après 
RETURN. 


Exemple : 
GOSUB 1000 


1000 


RETURN 


32) GOTO N 


Cette commande opère un branchement inconditionnel à 
la ligne du programme portant le numéro N qui doit donc 
exister dans le programme. 


— 156 - 


Exemple : 


40 GOTO 100 


100 : 


33) GRAB 
Cette commande assigne la place en mémoire de : 
9800 à B400 (48K), ou de 
1800 à 3400 (16K), pour utiliser la mémoire RAM. 
34) HEXS(V) 


Cette fonction calcule la valeur hexadécimale de la 
valeur V. 


Exemple : 


PRINT HEXS(36) 


35) HIMEM 


Cette commande abaisse le niveau supérieur de la 
mémoire utilisable pour les programmes basic, rendant la 
mémoire située au-dessus utilisable pour des programmes 
machine. 


Exemple : 


HIMEM Ë 7200 


36) HIRES 


Cette commande enclenche le mode graphique haute 
résolution. Le fond est mis au noir, l'"encre” est 
blanche, et le curseur est placé en haut et à gauche de 
l'écran, tandis que les lignes de texte sont maintenues 


dans la couleur précédente. 


— 157 - 


37) IF/THEN 
+. ELSE 


Si l'expression suivant le IF est vraie, alors toutes 
les instructions suivant le THEN sont exécutées. Si l'ex- 
pression est fausse, alors toutes ces instructions sont 
ignorées et le programme exécute les instructions suivant 
ELSE. ELSE peut être omis. 


Exemple 
10 IF A 10 THEN GOTO 20 
15 PRINT OK 
20 : 
38) INK N 


Cette commande modifie la couleur de l'encre d'écri- 
ture dans toute la surface de l'écran. N est un entier 
compris entre 0 et 7. 


Exemple 


39) INPUT 


Cette instruction arrête l'exécution d'un programme 
et attend une introduction de données avant de continuer. 
Les données rentrées sont assignées à des variables. 


Exemple 
INPUT N$,A 
ou : INPUT "AGE?";B 
40) INT(X) 


Fonction retournant la partie entière de l'expression 
numérique entre parenthèses, c'est-à-dire le plus grand 
entier inférieur ou égal à la valeur de l'expression en- 
tre parenthèses. 


— 158 - 


Exemple : 


?2INT(PI) 


donne 3. 


41) KEYS 

Ce mot-clé signifie qu'ORIC attend une donnée du cla- 
vier (keyboard) mais continue l'exécution, qu'une touche 
ait été pressée ou pas. 

Exemple : 

X$ = KEYS 
assignera à X$ la valeur de n'importe quelle touche pres- 
sée. 
42) LEFTS(AS,N) 

Cette fonction d'une chaîne de caractère A$ et d'un 
entier N retourne N premiers caractères en partant de la 
gauche de la chaîne de caractères en question. 

43) LEN(AS) 

Cette fonction retourne la longueur de la chaîne de 
caractères placée entre parenthèses. 
44) LET 


Cette commande, qui permet d'assigner une valeur à 
une variable, est en fait optionnelle. 


LET A = 4 


équivaut à A = 4 


45) LIST 


Liste les lignes spécifiées ou tout le programme sur 
l'écran. 
— 159 - 


Exemple 
LIST 100 
liste la ligne 100 du programme, mais 
LIST 
liste tout le programme. 
46) LLIST 
Cette commande équivaut à la précédente, mais la sor- 
tie, au lieu de se faire sur l'écran, se fait sur l'im- 
primante. 
Exemple 
LLIST 50 
ou : LLIST 
47) LNC) 
Cette fonction retourne le logarithme népérien de X. 
Par définition de cette fonction, X doit être strictement 


positif. 


Le logarithme néperien est la fontion réciproque de 
l'exponentielle (cf EXP(X)). 


Exemple : 
?LN(1) 
produira 0. 
48) LOG(X) 


Cette fonction retourne le logarithme décimal de X, 
qui doit être strictement positif. 


Exemple : 
?L0G(100) 


donnera 2. 
— 160 - 


49) LORES N 
Cette commande enclenche le mode basse résolution. 


Le fond de l'écran est mis au noir. Lorsque N est 
égal à O0, les caractères imprimés sont les caractères 
standard, et lorsque N vaut 1, ce sont les caractères du 
type alterné - représentant des figures stylisées - qui 
sont reproduits. 


Exemple 


LORES 0 


50) MID$(Z$,A,L) 


Cette fonction retourne la chaîne de caractères de 
longieur L débutant au Aième caractère de la chaîne de 
caractères Z$. 


Si A$ = “ORIC", MID$S(A$,3,2) retournera "IC" 


51) MUSIC A,B,C,D 


Cette commande produit une note de musique rangée sur 
le canal A (1,2 ou 3), définie par le numéro B de l'octa- 
ve (0 à 7), par le numéro C de la note (1 à 12), et jouée 


« 


avec un volume D (0 à 15). Pour plus de détails, se re- 
porter au chapitre traitant des commandes de son. 


Exemple 


MUSIC 1,3,5,10 


52) NEW 

Cette commande détruit le programme courant, ainsi 
que toutes les variables. Cette commande est utile lors- 
qu'on veut tout nettoyer avant de repartir à zéro pour un 
autre programme. 

Exemple 


NEW 


— 161 - 


53) ON ... GOSUB 


Cette commande branche le programme à la Nième éti- 
quette d'un sous-programme qui suit le mot-clé GOSUB. 


Exemple : 
ON N GOSUB 200,300 
testera N ; 
. si N = 1, le branchement se fait à la ligne 200 ; 
. si N = 2, il se fait à la ligne 300. 
54) ON ... GOTC 


Cette commande branche le programme à la Nième éti- 
quette spécifiée après le mot-clé GOTO. 


Exemple 
ON N GOTO 1000,2000 
branchera le programme à la ligne d'étiquette 2000 si N = 
2. 
55) PAPER N 


Cette commande change la couleur du fond de l'écran 
suivant la valeur de l'entier N (de O à 7). 


Exemple : 


PAPER 3 


56) PATTERN X 


Cette commande fait appel au générateur de pointillés 
pour les commandes DRAW. 


X est un entier compris entre 0 et 255. Sa configura- 


tion binaire avec une succession de 0 et de 1 schémtise 
la forme du pointillé qui affectera le segment défini par 


— 162 - 


DRAW. Les 1 correspondent à des traits pleins et les 0 à 
des vides. Ainsi PATTERN 255 produira un trait plein car 
255 en base 10 équivaut à 111111l1en base 2. 


57) PEEK (X) 


Cette fonction fournit le contenu de la case mémoire 
dont l'adresse est l'entier X. 


Exemple 
?PEEK(58) 


58) PI 


Ce mot clé est la constante PI = 3,1415... 


59) PING 


Cette commande produit un son prédéfini ressemblant à 
une sonnerie. 


60) PLAY A,B,C,D 


Cette commande musicale définit la sortie sonore d'un 
son ou d'une note grâce aux quatre paramètres suivants 


. À, entier de O à 7, définit la combinaison des canaux 
purs. 


. B, entier de O à 7, définit la combinaison des canaux 
bruités. 


. C, entier de 1 à 7, définit le mode de sortie. 
. D, entier de O0 à 32767, définit la période de sortie. 


Pour plus de détails, se reporter au chapître des 
commandes sonores. 


61) PLOT X,Y,A$ 
Cette commande inscrit le caractère A$ sur l'écran, 
en mode LORES ou TEXT, à l'endroit défini par les 


coordonnées X et Y. A la place de A$, on peut mettre un 


— 163 - 


« 


attribut spécifique à certaines opérations graphiques 
évoluées, i.e. un nombre compris entre O0 et 31 (cf annexe 
H), ou le code ASCII d'un caractère. 


62) POINT (X,Y) 


Cette fonction retourne 0 si le point élémentaire 
d'affichage graphique est dans la couleur du fond de 
l'écran, et -1 si ce n'est pas le cas, c'est-à-dire si ce 
point est imprimé par dessus dans la couleur de l'‘"en- 
cre". X et Y sont les coordonnées absolues de ce point. 


63) POKE N,V 


Cette commande écrit la valeur V (0-255) à la case 
mémoire d'adresse N de l'écran. Si N renvoie à une case 
mémoire où est rangé un octet servant à définir un carac- 
tère, V est compris entre 0 et 63. 


64) POP 


Cette commande sans paramètre joue le rôle d'une 
instruction RETURN, à la différence qu'après une instruc- 
tion POP, la prochaine instruction RETURN rencontrée 
opère un retour à l'instruction suivant non pas le der- 


nier GOSUB, mais l'avant-dernier. 


65) POS 


Ce mot-clé retourne la position horizontale du 
curseur. 


Exemple 


10 A = POS 


66) PRINT 


Cette commande imprime des variables, des nombres et 
des chaînes de caractères sur l'écran. 


Notez que ? peut être utilisé à la place du mot PRINT 
mais sera converti en PRINT en listant le programme par 
LIST. 

— 164 - 


Exemple : 
PRINT A,B,CS 
ou encore : PRINT "LE RESULTAT EST";B 
67) PULL 


Cette commande tire une étiquette de l'ensemble des 
boucles REPEAT. 


Exemple : 


PULL 


68) READ 
Cette commande lit une ou plusieurs données contenues 
dans une liste DATA et les assigne dans l'ordre de lectu- 
re aux variables qui suivent le mot-clé READ 
Exemple : 
10 READ A,B 
20 DATA 100,50 
69) RELEASE 
Cette commande assigne une aire de mémoire décrite 
dans la commande GRAB aux manipulations concernant l'é- 
cran en mode HIRES. 
70) REM 
Ce mot-clé permet d'introduire des commentaires,entre 
des instructions, dans un programme. Tout ce qui suit le 
mot REM est ignoré par l'interpréteur. 


Exemple : 


10 REM IGNORE CELA 


71) REPEAT ... UNTIL 


— 165 - 


Cette commande crée une boucle pour répéter toutes 
les lignes du programme jusqu'à une instruction où il est 
procédé à un test. Si celui-ci est faux, l'exécution 
refait un tour et si le test est vrai, l'exécution est 
poursuivie à la ligne suivant UNTIL. 


72) RESTORE 


Cette commande replace le pointeur de lecture d'une 
instruction READ à la première donnée de la liste DATA. 


Exemple : 
5 READ A,B 
10 DATA 10,20 
15 RESTORE 
20 READ C 
25 ?C 


fournira à C la valeur 10. 


73) RETURN 


Cette commande indique la fin d'un sous-programme et 
renvoie la suite du déroulement de l'exécution à l'ins- 
truction suivant la dernière instruction GOSUB lue. 


74) RIGHTS (AS,N) 


Cette fonction retourne les N derniers caractères en 
partant de la droite, d'une chaîne de caractère A$. 


75) RND(X) 


Cette fonction fournit automatiquement un nombre 
aléatoire chaque fois qu'elle est appelée. Si X > ll, 
alors RND(X) se trouve entre O0 et 1. Si X = O le nombre 
généré en dernier est produit, si X < 0, le nombre pro- 
duit est le même pour chaque X. 


76) RUN 


Cette commande lance l'exécution d'un programme en 


basic. 
— 166 - 


77) SCRN (X,Y) 


Cette fonction retourne le code ASCII pour un carac- 
tère placé à la position de coordonnées (X,Y) en mode 
LORES ou TEXT. 


78) SGN(X) 


Cette fonction retourne -1 si l'argument X est néga- 
tif et 0 si l'argument X est positif ou nul. 


79) SHOOT 


Cette commande produit un son prédéfini imitant le 
bruit d'un coup de feu. 


80) SIN X 


Cette fonction calcule le sinus de l'angle dont la 
valeur en radians est X. 

Pour mémoire, sur le cercle 

trigonométrique unité, la lon- 

gueur du segment OB représente 


la valeur du sinus. Si B est 
4) au-dessus de A, le sinus est 
À positif et l'angle varie entre 

0 et 7. 


Si B est en-dessous de 0, le 
sinus est négatif et l'angle 
varie entre 0 et -#. 
81) SOUND A,B,C 
Cette commande musicale produit un son défini par : 
. À : numéro du canal où est rangé le son (1 à 6) ; 
. B : période de vibration du son ; 


. C : volume sonore (0 à 15). 


— 167 - 


82) SPC (N) 


Cette fonction laisse un espace de N positions sur 
l'écran où N est un entier de 0 à 255. On l'utilise en 
impression, par exemple : 


PRINT "AT"SPC(3)"CHOUM" 


produira : AT CHOUM 


83) SQR(X) 


Cette fonction fournit la racine carrée de l'argument 
X, c'est-à-dire le nombre positif dont le produit par 
lui-même donne X, lequel doit obligatoirement être posi- 
tif ou nul. 


Exemple : ?2SQR(3) 
fournit : l:/32%.34 
84) STOP 


Cette instruction arrête l'exécution d'un programme 
et provoque un message BREAK IN 10 si, à la ligne 10, il 
y a 10 STOP. 


85) STRS(N) 


Cette fonction convertit un nombre en la chaîne de 
caractères correspondante. Par exemple STR$(10) convertit 
la constante numérique 10 en la chaîne de deux carctères 
1 et O accolés, soit 10. Cette fonction est utile pour 
écrire des nombres au milieu de l'écran, car on utilise 
PLOT qui ne peut écrire que des chaînes de caractères, 
d'où la nécessité de transformer ces nombres en chaînes 
de caractères, ce qui est assuré par STRS. 


86) TAB(N) 


Cette commande tabule l'impression, c'est-à-dire la 
déplace de N positions à partir de la gauche de l'écran. 
N ne doit pas dépasser 249. 


— 168 - 


Exemple : 


PRINT TAB(3) 


87) TAN(X) 


Cette fonction calcule la valeur de la tangente de 
l'angle dont la valeur en radians vaut X. 


Pour mémoire, rappelons que 
dans le cercle unité, la lon- 
gueur AB mesure la tangente de 
l'angle f + On ne peut pas 
avoir X = 71/2 = 1,5707... car 
la tangente serait infinie et 
n'est donc pas définie. 





88) TEXT 


Cette commande enclenche le mode TEXT. 


89) TROFF 

Cette commande supprime le suivi (trace) de l'exécu- 
tion qui consiste à faire imprimer le numéro de la ligne 
où passe l'interpréteur au moment de l'exécution. 
90) TRON 

Cette commande enclenche le suivi (trace de l'exécu- 
tion du programme en affichant le numéro de la ligne de 
chaque instruction exécutée sur l'écran. 


91) TRUE 


Ce mot-clé attribue la valeur -l au résultat d'un 
test logique (réciproque de FALSE). 


Exemple : 


A = TRUE 


— 169 - 


92) USR(N) 

Cette commande appelle un sous-programme en langage 
machine en lui transmettant l'argument N. 
93) VAL(NS) 


Cette fonction transforme une chaîne de caractères 
numériques en la valeur correspondante. 


Exemple 
A = VAL(AS) 

Si A$ n'est pas une chaîne de caractères numériques, 
VAL(AS) vaut O0. 
94) WAIT N 

Cette commande provoque une pause, dans l'exécution 
du programme, d'une durée de N centisecondes. Il est im- 
possible de provoquer une interruption de l'exécution 
d'une pause par [CTRL] [C]. 
Exemple 


WAIT 100 


signifie faire une pause d'1 seconde. 
95) ZAP 


Cette commande produit un son prédéfini imitant celui 
d'un “pistolet à laser”. 


— 170 - 


Annexe B LES MESSAGES D'ERREUR 


Votre Oric contient un interpréteur qui vérifie sys- 
tématiquement chaque instruction basic juste avant de 
l'exécuter. S'il n'arrive pas à comprendre quelque chose 
dans cette instruction ou s'il y détecte une erreur pré- 
cise, il va délivrer aussitôt ce qu'on appelle un message 
d'erreur. Ces messages d'erreur sont en nombre fini et 
Oric en contient vingt. Mais avant de les examiner un par 
un, il faut noter la légère différence qui existe entre 
les messages d'erreur délivrés lorsque l'on travaille en 
mode direct et ceux délivrés lorsque l'on travaille en 
mode différé (i.e. lorsque l'on écrit un programme). Dans 
les deux cas, les messages d'erreur sont les mêmes ; seu- 
lement, si vous êtes en mode direct au moment où l'erreur 
s'est produite, l'interpréteur se contente de délivrer le 
seul message d'erreur. 


Par exemple, l'enregistrement 
PRIN "BONJOUR" 
provoquera immédiatement le simple message d'erreur sui- 
vant : SYNTAX ERROR, c'est-à-dire ERREUR DE SYNTAXE. 


Comme vous l'avez remarqué, il a été oublié le T de 
PRINT. 


- 171 - 


Par contre, si vous êtes en mode différé au moment où 
l'interpréteur détecte une erreur, celui-ci vous délivre 


non seulement le message d'erreur approprié, mais il ins- 
crit de plus, à sa suite, le numéro de la ligne où il a 


détecté l'erreur. 
Par exemple, le mini-programme 
5 PRIN "BONJOUR" 
lancé par RUN, provoquera le message d'erreur suivant 
SYNTAX ERROR IN 5 
Ce renseignement supplémentaire peut faire gagner 
beaucoup de temps, mais il faut, ici, faire la remrque 
suivante. Ce n'est pas parce que l'interpréteur a détecté 
une erreur à une certaine ligne qu'une correction devra 
être apportée, forcément, à cette ligne. L'erreur peut 


provenir d'instructions précédentes qui, bien que correc- 
tes du point de vue basic, calculent des choses fausses. 


Par exemple, le programme 


5 À = INT(O.5) 
10 B = 10 

20 C=B /A 
30 PRINT C 


provoquera inévitablement le message d'erreur suivant 
DIVISION BY ZERO ERROR IN 20 


La correction peut évidemment être apportée à la li- 
gne 20, si au lieu de diviser B par A, on voulait faire 
le produit B * À ; mais l'erreur peut aussi provenir de 
la variable A, qui ne devrait pas avoir la valeur nulle 
si au lieu de À = INT(0.5), on avait écrit A = INT(0O.5) + 
1. Retenez de ce petit exemple que l'erreur n'est pas 
forcément là où le message d'erreur la situe. C'est à 
vous de voir dans chaque cas. 


Au moment où vous débutez votre apprentissage infor- 


matique sur Oric, vous avez l'occasion de rencontrer plus 
d'une fois chacun de ces messages d'erreur. 


mL /2 


Mais c'est en sachant d'autant mieux ce qu'ils signifient 
que vous apprendrez à corriger d'autant plus vite vos er- 
reurs, et que vous les rencontrerez de moins en moins 
souvent. Lorsque l'interpréteur ne publie plus aucun mes- 
sage d'erreur, cela signifie seulement que ce que vous 
avez écrit est cohérent du point de vue basic, et est 
exécutable par Oric ; cela ne signifie pas pour autant 
qu'il exécute ce que vous vouliez lui faire exécuter. 


Voici les vingt messages d'erreur possibles, qui sont 
délivrés en anglais par Oric. Ils sont classés par ordre 
alphabétique. Nous vous donnons ici leur traduction, leur 
signification et quelques indications sur les origines 
possibles des erreurs détectées. 


1) BAD SUBSCRIPT (mauvais indice) 


On a cherché un élément de tableau qui ne peut pas 
exister, vu la dimension qui a été donnée pour ce ta- 
bleau. Par exemple À a été dimensionné par DIM A(20,20) 
et l'on cherche A(24,25), ce qui est en contradiction 
avec la dimension fournie, ou encore, ce qui est pire, on 
manipule A(24,25) alors que À avait été dimensionné par 
DIM A(5). 


Dans ce cas, il vous faut revoir la compatibilité 
entre les valeurs des indices des éléments de tableau 
présents dans la ligne du programme qui a provoqué le 
message d'erreur, et les instructions dimensionnant ce ou 
ces tableaux. 


2) BAD UNTIL (mauvais UNTIL) 


L'interpréteur vient de lire une instruction UNTIL 
sans avoir lu auparavant une instruction REPEAT. Il vous 
reste à ajouter le REPEAT manquant ou à supprimer l'UNTIL 
de trop. 


3) CAN'T CONTINUE (on ne peut continuer) 


Oric essaie en vain de continuer ou de reprendre 
l'exécution d'un programme. Ce message peut paraître dans 
deux cas. Lorsqu'Oric a détecté une erreur et qu'au lieu 
de chercher à la corriger, vous essayez de reprendre 
l'exécution du programme en tapant CONT. 


— 173 - 


Ce message vient aussi lorsque vous avez interrompu 
l'exécution d'un programme et que pendant cette interrup- 
tion vous avez modifié, ajouté ou détruit une ligne du 
programme qui empêche la poursuite normale de l'exécution 
du programme. Dans ce cas, on peut parfois reprendre 
l'exécution par un GOTO numéroté. Remarquez que si vous 
avez modifié le programme, vous ne pouvez plus reprendre 
son exécution par CONT ; il faut utiliser un GOTO numé- 
roté. 


&) DISTYPE MISMATCH (incompatibilité entre modes 
d'écriture) 


Oric cherche à faire des choses spécifiques à un mode 
d'écriture (HIRES ou TEXT) alors que l'on ne se trouve 
justement pas dans ce mode. Le cas classique où se pro- 
duit ce message est celui où l'on cherche à dessiner dans 
le mode TEXT. 


5) DIVISION BY ZERO (division par zéro) 


Ce message peut provenir d'une variable qui n'a pas 
été initialisée et a la valeur nulle au moment du calcul, 
car toute variable non initialisée explicitement a la 
valeur nulle dès le début du programme. 


6) FORMULA TOO COMPLEX (expression trop complexe) 


L'expression contenue dans la ligne qui a provoqué ce 
message est trop compliquée pour Oric. Par exemple, ce 
message est délivré si la ligne contient plus de deux 
IF/THEN. 


7) ILLEGAL DIRECT (interdit d'emploi en mode direct) 

On a cherché à utiliser une instruction ou une com- 
mande en mode direct, à partir du clavier, alors que 
c'était impossible. 

Par exemple et pour mémoire, les instructions INPUT, 
GET, DEF FN, DATA sont interdites d'emploi en mode 
direct. 


8) ILLEGAL QUANTITY (valeur erronée) 


On a cherché à calculer la valeur d'une fonction en 
un point qui sortait de son domaine de définition. 


— 174 - 


Par exemple : 


argument de LOG négatif ou nul 
. argument de SQR négatif 
. O0 élevé à une puissance négative 
indice d'un tableau négatif ou supérieur à 32767 


9) NEXT WITIHOUT FOR (NEXT sans FOR correspondant) 


L'apparition de ce message peut provenir de plusieurs 
causes : mauvaise imbrication de boucles entre elles, ou- 
bli de supprimer un NEXT après une correction qui a éli- 
miné un FOR... 


10) OUT OF DATA (données épuisées) 


On cherche à lire encore des données alors que celles 
contenues dans tous les DATA ont déjà été lues. Ce messa- 
ge provient généralement d'un manque de données dans les 
DATA par rapport à ce que demandent les instructions de 
lecture (INPUT ou READ). 


11) OUT OF MEMORY (mémoire épuisée) 


Le programme est trop long ou bien demande trop de 
variables, ou encore contient plus de seize boucles et 
GOSUB emboîtés les uns dans les autres. 


12) OVERFLOW (dépassement de capacité) 


3g0n nombre, plus grand en valeur absolue que 1,/041 x 
10 a été élaboré, à un moment donné, dans un calcul. 
Pour les nogbres dont la valeur absolue est inférieure à 
2,9 x 10 ce message d'erreur n'apparaît pas, car 
Oric les assimile à zéro. 


13) REDIM'D ARRAY (tableau redimensionné) 
Ce message d'erreur se produit dans le cas suivant 
Un tableau a été déjà dimensionné et on essaie abusive- 


ment de le redimensionner, en relisant cette instruction 
ou en lisant une nouvelle instruction le dimensionnant. 


14) REDO FROM START (recommencez au début) 


Au cours d'une instruction INPUT, on a essayé de ren- 
trer une chaîne de caractères alors qu'on demandait un 


= 175 = 


nombre. Il faut recommencer à rentrer depuis le début les 
valeurs demandées par l'INPUT en question. 


15) RETURN WITHOUT GOSUB (retour sans GOSUB) 


L'interpréteur vient de lire un RETURN alors qu'il 
n'avait pas lu de GOSUB le lui annonçant. Cette erreur 
peut provenir d'une exécution lancée par un GOTO numéroté 
qui a sauté le GOSUB, ou bien de l'oubli de l'instruction 
END en fin du programme principal suivi d'un sous-pro- 
gramme. 


16) STRING TOO LONG (chaîne de caractères trop longue) 


Ce message d'erreur se produit lorsqu'on essaie de 
fabriquer, par concaténation, une chaîne de caractères de 
plus de 255 caractères, ce qui est interdit. 


17) SYNTAX ERROR (erreur de syntaxe) 


Ce message sera un des plus fréquemment rencontrés 
par le novice en informatique. Il signifie que l'instruc- 
tion qui a provoqué ce message est incompréhensible pour 
l'interpréteur basic. Les causes peuvent être variées 
oubli de parenthèse, caractères illégaux, mauvaise ponc- 
tuation, faute d'orthographe dans un mot-clé, virgule 
manquante, variable d'un certain type employée à tort, 
etc... Il vous reste donc à relire l'instruction incrimi- 
née et à vérifier l'exactitude, du point de vue basic, de 
chacun des caractères écrits. 


18) TYPE MISMATCH (incompatibilité entre variables 
numériques et alphanumériques) 


Ce message se produit lorsqu'on essaie d'assigner une 
chaîne de caractères à une variable numérique ou vice 
versa, ou encore lorsque l'on fournit une chaîne de 
caractères comme argument d'une fonction qui n'accepte 
que des nombres ou vice versa. 


19) UNDEF'D STATEMENT (instruction non définie) 
On essaie d'accéder, en utilisant une instruction 
GOTO, GOSUB ou THEN, à une ligne dont le numéro est 


inexistant. Ce message provient souvent de corrections 
mal faites dans le programme. Par exemple, on a modifié 


— 176 - 


un numéro de ligne et l'on a oublié de reporter cette 
correction sur l'instruction GOTO qui renvoyait à cette 
ligne. 


20) UNDEF'D FUNCTION (fonction non définie) 


On fait appel à une fonction qui n'a pas été définie 
par l'instruction DEF FN. Cela peut provenir d'un oubli 
de définition de la fonction, ou peut-être tout simple- 
ment d'une mauvaise orthographe de celle-ci. 


— 177 - 


Annexe C UTILISATION DE CASSETTES AVEC ORIC 


Oric ne peut garder en mémoire qu'un seul programme 
basic. Aussi, lorsque vous aurez écrit des programmes re- 
lativement longs, vous devrez les stocker sur cassette 
pour les réutiliser quand vous voudrez, sans avoir à les 
retaper, sur un Oric. 


= CONNEXION D'UN MAGNETOPHONE A CASSETTES A UN ORIC 


La face arrière du boîtier d'Oric comporte une prise 
DIN à sept trous pour la connexion du magnétophone. Deux 
solutions sont possibles 


. Si la prise de votre magnétophone comporte aussi 
sept trous, aucun problème ne se pose et le moteur 
de votre magnétophone sera commandé automatiquement 
par Oric, sans qu'aucune intervention manuelle ne 
soit nécessaire. 


. Si la prise de votre magnétophone ne comporte que 
trois à cinq trous, seuls trois d'entre eux sont à 
utiliser et vous devrez donc demander à votre 
distributeur un câble à trois fils. Vous devrez, à 
chaque opération avec le magnétophone, mettre en 
marche celui-ci manuellement et l'arrêter ensuite. 


— 178 - 


Deux vitesses d'enregistrement/lecture peuvent être 
utilisées par Oric : 


. 240 caractères par seconde (2400 bauds) 


Cette vitesse nécessite des têtes de lecture/ écri- 
ture propres et biens alignées, et des cassettes de 
bonne qualité. 


+ 40 caractères par seconde (300 bauds) moins rapide, 
mais plus sûre. 


= SAUVEGARDE ET CHARGEMENT D'UN PROGRAMME 


Pour sauvegarder un programme sur cassette, mettez 
votre magnétophone en position d'enregistrement, tapez 
CSAVE "XX" et appuyez sur [RETURN]. (XX est le nom de vo- 
tre programme, actuellement encore dans la mémoire vive ; 
ce nom peut compter jusqu'à 17 caractères y compris chif- 
fres, points, barres obliques). Le message “SAVING XX" 
apparaît tout en haut de l'écran : ce qui veut dire que 
votre programme est bien en cours d'enregistrement. Lors- 
que c'est terminé, “Ready” s'affiche sur l'écran. 


Puis, quelques jours plus tard vous désirez recharger 
"XX" dans Oric. Branchez alors correctement votre magné- 
tophone et tapez : CLOAD "XX" après avoir mis votre 
magnétophone en position lecture. Oric cherche alors "XX" 
et pour l'indiquer affiche le message “SEARCHING". En 
haut de l'écran ce message se transforme en “LOADING XX". 


Mais peut-être avez vous oublié le nom de votre pro- 
gramme ? Peu importe, recommencez la manipulation en 
tapant CLOAD "“". Le programme chargé sera le premier 
trouvé, si ce n'est pas le bon, recommencez jusqu'à ce 
que ce soit le bon. 


La commande CSAVE fait enregistrer à la vitesse de 
2400 bauds. Si vous voulez soigner votre enregistrement 
dans le cas où votre magnétophone n'est plus de bonne 
qualité, vous devez enregistrer à 300 bauds. Si à 2400 
bauds un problème survient, vous risquez de voir apparaî- 
tre, au cours du chargement du programme, le message 
d'erreur : FILE ERROR - LOAD ABORTED (erreur de fichier, 
chargement abandonné). Pour éviter cela, lors de la sau- 
vegarde, tapez : CSAVE “PROGl", S. PROGL étant le nom du 


— 179 - 


programme, le S vient de slow (lent en anglais) et 
commande l'enregistrement à la vitesse de 300 bauds. 


Pour les chargements de programmes sauvegardés 300 
bauds, tapez CLOAD “"PROG1", S sinon Oric s'attendra à une 
vitesse de 2400 bauds. Si vous souhaitez faire exécuter 
votre programme automatiquement une fois qu'il a été 
chargé, tapez CSAVE "PROGl", AUTO. 


Be Be 


Vous pouvez également sauvegarder des blocs mémoire. 
Pour cela vous devez connaître l'adresse, la localisation 
du début et de la fin de ce bloc. Ainsi : 


CSAVE “PROGMEM", AË400, E H499 


Cette instruction sauvera le bloc ‘(appelé par vous 
PROGMEM) situé, rangé en RAM entre les localisations # 400 
et H 499. Le signe # indique qu'il s'agit de nombres hexa- 
décimaux. Le A et le E sont obligatoires : ils indiquent 
le début et la fin. Vous pouvez utiliser des nombres dé- 
cimaux (sans le signe # ). 


— 180 - 


Annexe D UTILISATION D'UNE IMPRIMANTE 


Oric peut être utilisé avec toute imprimnte ayant 
une interface Centronics. Pour cela, l'imprimante doit 
être connectée avant d'être mise en marche. Si tout est 
correct, la tête de l'imprimante doit s'aligner d'elle- 
même sur la position de départ dès que l'on alimente. 


Dès que l'imprimante est branchée, tapez le programme 
suivant 


10 REM ** ESSAI D'IMPRESSION ** 
20 FOR N = O TO 255 

30 LPRINT N, CHRS(N) 

40 NEXT N 


Tapez ensuite 
LLIST 


Cela listera le programme sur l'imprimante au lieu de 
l'écran. Si vous n'obtenez pas des caractères “normaux”, 
mais des signes inattendus, consultez la notice de l'im- 
primante pour changer les caractères d'impression, 
jusqu'à obtenir un listage satisfaisant. 


— 181 - 


Faites alors exécuter le programme ci-dessus qui est une 
simple boucle, imprimant un nombre suivi du caractère 
dont il est le code ASCII. Cela vous montrera quels 
caractères vous pouvez obtenir, et surtout quels nombres 
correspondent à des codes de contrôles pour l'imprimante. 
Les codes de contrôle commandent des actions telles que 
le retour du chariot, les caractères serrés ou non, pe- 
tits ou grands, ou l'avance du papier, etc... 


Par exemple essayez : 


les caractères doublent de taille. 
annule cette action. 


LPRINT CHR$(31) 
LPRINT CHR$(30) 


REMARQUE : Les codes de contrôle peuvent donc 
vous être très utiles pour obtenir des impressions 
soignées, riches, utilisant des gadgets vous 
permettant d'obtenir des effets variés ou esthéti- 
ques. 


- 182 - 


Annexe E NUMERATION HEXADECIMALE, 


REPRESENTATION DES REELS ET DES ENTIERS 


1. LA NUMERATION HEXADECIMALE 


Ainsi que vous l'avez vu dans les chapitres de pré- 
sentation, la configuration d'un microordinateur est tel- 
le que les informations sont stockées dans des circuits 
intégrés. 


La représentation physique de ces informations est 
donc un ensemble d'"interrupteurs" qui sont soit ouverts, 
soit fermés. L'état d'un interrupteur constitue une 
information élémentaire que l'on appelle bit ; un bit 
vaut donc soit 0, soit 1. 


Chaque information est donc traduite en bits par la 
machine, c'est-à-dire en langage binaire. Pour plus de 
commodité technologique, ces bits sont réunis par paquets 
de huit que l'on appelle octets. L'octet est donc l'unité 
de base pour votre Oric. 


Puisque Oric “travaille” sur des octets, il est donc 
commode d'utiliser une numération en tenant compte. C'est 
pourquoi on utilise une numération par paquets de quatre 
bits (par ensemble de seize états possibles). 


— 183 - 


À ce niveau il n'est pas inutile de rappeler les 
principes de la numération. Vous utilisez couramment la 
numération en base 10 (décimale) ; ceci n'ayant vraisem- 
blablement de raison d'être que parce que nous possédons 
10 doigts. En numération en base 10 nous utilisons 10 
chiffres 0, 1, ..., 9. Chaque nombre, en base 10, ne s'é- 
crit qu'à l'aide de ces 10 chiffres. 


Par exemple, le nombre 7864 s'interprète comme 
& unités + 6 dizaines + 8 centaines + 7 milliers, 


c'est-à-dire (7864) 2 = 4 + 6 x (base) + 8 x (base 
x base) + 7 x (base x fase x base). 


En numération en base 16 (ou hexadécimale), le prin- 
cipe est strictement le même. On utilise 16 chiffres : 0, 
1, ..., 9, À, B, C, D,E, F 


La traduction en base 10 de ce chiffre s'écrit : 


(ie 7 (0) 
Oh = 

Ag * GO) 
Elie: * Co 


Ainsi le nombre AlE7 vaut 7 + E x (base) + 1 x (base 
x base) + À x (base x base x base), 


soit (AlE7) 


(16 x 16 x 1é 


Le passage de la base décimale à la base hexadécimale 
s'effectue par l'opération inverse. 


7 + 14 x (16) + 1 x (16 x 16) + 10 x 
(41487); 


Considérons l'entier (N) 0° Pour obtenir son écri- 
ture en base 16, on divise a par la valeur 16 jus- 
qu'à obtenir un reste plus petit que la base. L'écriture 
s'effectue à l'aide de la valeur successive des 
(restes);£- 


Par exemple traduisons (125342), en base 16 : 


— 184 - 


125 342 : 16 
13 3 : 7 833 : 16 


0 54 : 1 43 : 489 : 16 
062 : 153 : 09 : 30 : 16 


14 : 09 : : 14 : 


1 : 16 

15550 
E 9 9 E 1 
Donc (125 342), = 14 + 9 x (16) + 9 x (16 x 16) + 14 x 
(16 x 16 x 16) + 1 x (16 x 16 x 16 x 16) 


(125 342), = (1E99E). 


Il ne vous reste donc plus qu'à vérifier sur quelques 
exemples que vous avez compris le principe du passage 
d'une numération à l'autre. N'oubliez pas que votre Oric 
exécute facilement les conversions de la base décimale à 
la base hexadécimale et réciproquement. 


2. LA REPRESENTATION DES REELS 


Comme vous l'avez vu au chapitre 3 votre Oric stocke 
les réels sur cinq octets (un octet pour l'exposant et 
quatre pour la mantisse), voyons comment cela se passe 
physiquement. 


31 30 25 24 49 13 46 42 9 8 6 1 
Lee RETE 
éd bit de bit leg 
qe exposant signe mant'sse à 4 


« Pour l'exposant, il y a 7 bits ayant deux valeurs 
(0, 1) pour le représenter, puisque le dernier bit est 
“bloqué"_par le signe. Donc pour représenter l'exposant 
il y a 2° = 128 positions (0—127, -127—0). 


Puisque l'on raisonne en base deux, les exposants 
vont donc varier de : 


27127 à 2127 


. La mantisse : elle est représentée sur 4 octets. Le 
dernier bit est le bit du signe et le premier bit est 
tou jours bloqué à 1. 


— 185 - 


En fait, la mantisse est écrite en logarithme en base 
2 : pour traduire en base hexadécimale le contenu d'une 
mantisse, on repère chaque bit valant 1 par sa position. 
(Ces bits sont appelés i et leur position pi): 


La mantisse vaut 
mantisse = somme (2) Pi sur tous les bits 


Ainsi, si on considère le contenu de la mantisse du 
schéma ci-dessus on a : 


mantisse = 27! + 2 


donc la mantisse varie entre : 1/2< mntisse < !1 
-1/2 5 mantisse > -1 


(On obtient 1/2 quand tous les bits du 2ème au 32ème sont 
à zéro). 


(On obtient 1 quand tous les bits du 2ème au 31ème sont à 

1). 

2 127 

Donc, en valeur absolue 27128 < réel < 2 
La mantisse est stockée, ur 31 bits + bit de signe : 

la précision vaut 1/2 x 2 (soit 10 chiffres signifi- 

catifs). 


3. REPRESENTATION DES ENTIERS 


Vous avez vu au chapitre 3 que votre Oric stockait 
les entiers dans deux octets, voyons comment cela se tra- 
duit physiquement. 


16 5 8 1 


DS ER Rne  EEes 


bit contenant Le signe 

de L'enfier 

11 y a 15 bits pour stocker la valeur absolue d'un 
entier (valeur absolue (X) = Max (X;-X)), il y a donc 
2 positions possibles ; c'est pourquoi Oric pe les 
fait varier, en valeur absolue, qu'entre 0 et 2 - 1 
= 32767. 


— 186 - 


ANNEXE F 


Codes ASCII 
ASCII ASCII ASCII 
Code Caractère Code Caractère Code Caractère 
000 NUL 036 $ 072 H 
001 SOH 037 % 073 I 
002 STX 038 & 074 \J 
003 ETX 039 | 075 K 
004 EOT 040 ( 076 L 
005 ENQ 041 ) 077 M 
006 ACK 042 , 078 N 
007 BEL 043 + 079 O 
008 BS 044 : 080 P 
009 HT 045 - 081 Q 
010 LF 046 ; 082 R 
011 VT 047 / 083 S 
012 FF 048 0 084 T 
013 CR 049 1 085 U 
014 SO 050 2 086 V 
015 SI 051 3 087 W 
016 DLE 052 4 088 X 
017 DCI 053 5 089 Y 
018 DC2 054 6 090 Z 
019 DC3 055 7 091 [ 
020 DC4 056 8 092 \ 
021 NAK 057 9 093 ] 
022 SYN 058 : 094 t 
023 ETB 059 ; 095 £ 
024 CAN 060 < 096 © 
025 EM 061 = 097 a 
026 SUB 062 > 098 b 
027 ESCAPE 063 ? 099 c 
028 FS 064 @ 100 d 
029 GS 065 A 101 e 
030 RS 066 B 102 f 
031 US 067 C 103 g 
032 SPACE 068 D 104 h 
033 ! 069 E 105 i 
034 , 070 F 106 j 
035 # 071 G 107 k 
108 l 115 8 122 Z 
109 m 116 t 123 { 
110 n 117 u 124 | 
ill 0 118 v 126 | 
112 p 119 w 126 — 
113 q 120 x 127 DEL 
114 r 121 y 


ASCII codes are in decimal. 
LF-—Line Feed, FF=Form Feed, CR=Carriage Return, DEL= Rubout 


- 187 - 


Annexe G CARTE 


MODE HIRES 


ROM 


ESPACE 


ECRAN 


CARACTERES 
ALTERNES 


CARACTERES 
STANDARD 


e + ee 


FFFF 


co00 


: BFEO 


A000 


9C00 


9800 


MEMOIRE D'ORIC 


MODE TEXT 
FFFF 
ROM : 
it cO00 
ESPACE 
: BFEO 
ECRAN 
: BB80 
CARACTERES 
ALTERNES 
: B800 
CARACTERES 
STANDARD 
B400 


Les adresses sont exprimées en hexadecimal ; elles 
peuvent suivre la commande POKE et vous permettre ainsi 
de contrôler une partie de l'écran 


ou 


de BB 


80 


de A000 


à BFEO (TEXT) 
à BFEO (HIRES) 


ou d'accéder au stockage des caractères alternés ou stan- 
dards pour en modifier les définitions par exemple. 


9800 
9C00 
A000 
BFEO 
BB80 
B800 
B400 


en 
en 
en 
en 
en 
en 
en 


décimal 
décimal 
décimal 
décimal 
décimal 
décimal 


décimal : 


38912 
39936 
40960 
49120 
48000 
47104 
46080 


— 188 - 


Annexe H ROLE DES ATTRIBUTS 


: encre VERTE 

: encre JAUNE 

: encre BLEU 

: encre MAGENTA 


encre CYAN 
encre BLANCHE 


10 


11 


12 


14 


1011 


1100 


1101 


1110 


Caractère standard 
simple hauteur 
Caractère alterné 
simple hauteur 
Caractère standard 
double hauteur 


: Caractère alterné 
: double hauteur 

: Clignotement simple : 
: hauteur standard 
: Clignotement simple : 
: hauteur alterné : 
: Clignotement double : 
: hauteur standard 

: Clignotement double 
: hauteur alterné 


papier NOIR 
papier ROUGE 


: papier VERT 
: papier JAUNE 
: papier BLEU 


papier MAGENTA 
papier CYAN 


: papier BLANC 


. 
. 


: Changement de 


synchronisation 


Les fonctions décrites dans ce tableau sont celles 
obtenues pour des attributs suivant les commandes PLOT, 


FILL, POKE. 


L'utilisation de X, O <X <31 dans la commande PRINT 


CHR$(X) est plutôt à relier à 


contrôle (voir appendice B). 


— 189 - 


l'action des caractères de 


INDEX ALPHABETIQUE 


ABS sssoossessssescesese des se de 6e de 6 016 0 
Acquisition de données ............sssese 
Addition sscessuossoeoseoss secs. see does 6 0e 
Affectation ..s..ssssscssssossccscssescuee 
Alternée (forme) ...s.sssssssssssssosseoee 


AND vssososssossssusouescssecosssocsseuses 
Appel d'un sous-programme ee... 
Arctangente...esssssssssscssssscessssssee 
Arrêt d'une exécution de programme ...... 


ASC csssocossossossosssesoussssonssessess 


ASCII (code) 


ATN cosssososososesesssoseseseseessseesee 


Attribut 


BASLC sécu soie es ee den dde sde 00 


Basse résolution ee... 


Binaire (code) .. 


CCC 


Bit csscsosssssesossosssessesescssreseee 


Boucle ses. sus se ses 6e 7 0e 0 0 ete 86 60 60e 660 


BREAK cosoosossssssesosososononsesessesee 


BŸYTE essences 


CALL sososssssossessomesesseesessesseesee 


Canal. sos eme cs detre ee d'en ere oise 0e 


Caractères alphanumériques ......eeseeese 
Caractères spéciaux cessoocossssssosessses 
Carte mémoire ..ssssoosoossssessesssssee 
Cassette osseuse 
Cellule ses cesse sé etes se 5e 0e 6e ee se 0 
Chaîne de caractères ......ssessssosseeee 


CHAR css 


Choix conditionnel 


CRC 


CHRS sense eos ee Se ee de sieate die ee ete ee de 
CIROLE ste sise sea Dao ace ses dus D etele fe se 0 
CHAVLer se etes ones ete s'est se de eee ee 


CLEAR cessssssssosscsececsese 


- 190 - 


93, 147 


19:71 


45, 73 
90, 92 


94, 147 
53, 187 
93, 148 
104, 105, 
113, 189 


15 
105 
13 
13 
30, 51, 
49, 83 


13 


Clignotement .... 


CLOAD 
CLS 


Code d'erreur ... 


Commandes fondamentales 


Commandes graphiques haute résolution ... 
Commandes graphiques basse résolution ... 


Constantes 


CONT 


0... 


Correction dans un programme ..s.ssessoe 


cos 


Cosinus 
Couleurs 


.…... 
...... 


........ 


Création de fonction utilisateur ........ 


CSAVE 
CTRL 
CTRL 
CTRL 
CTRL 
CTRL 
CTRL 
CTRL 
CURMO 
CURSE 


A 
C 
D 
F 
G 
x 


V 
T 


CCC 


CCR 


0000000... 


Cüurseur … ses ses eds eee 


Curseur HIRES ...... 


DATA ..o.ssosesee 
DEEK ... 


DEF FN 


DEF FNA ........... 


DEF FNA$ ........ 


DEF USR 


Del 


0 


...... 


........ 


.…... 


Dépassement de capacité ..ooossoossosese 
Différent (signe différent de) .......... 


DIM ..... 


Dimension d'un tableau .... 


DIVISION -s see ds eee. die 80 ro oo die e 


DORE ose 


Données 
DRAW ss 
Durée du son ........ 


....… 


lt 108 
125, 131 
150 
46 
171 
36, 
108 
114 
54, 
31, 
40 
93, 
93 
108 
95 
152 


145 


57 
150 


151 


Effacement d'un programme .......ssessse 36 
Effacement d'une ligne ................ 41 
ENCre soso scecsese 108 
END sesouosssseosesssncss etes ose es 0 40, 77, 


Enregistrement d'un programme ..........s 178 
Entrée/sortie .......s...ssssssssssssssece 97 

EXP nées diese 00.00 4e 8 5-8 see docs so cos ee eee ee 93, 154 
Exponentielles .....s.ssesesssssosesssese 93 
EXPLODE osseuse 50, 136, 


FALSE: siesiotoiciere die s ce 81406 do10.0 81015 0 0 60e 0 e:6 154 
FIL sr entente etes onda tomanee LOS 154 
EN és css Secret ess sise dde does ends 6066 155 
Fonctions ..4.0 00600 606 600,060 66006 2 92 
numériques internes....sssssssssssesses 92 
mathématiques simples ................. 92 
mathématiques complexes ...........+++ 93 
traitant les chaînes de caractères .... 93 
de conversion ASCII/caractères ......ee 94 
de conversion chiffres/lettres ........ 94 


Génération d'un nombre aléatoire ........ 92 
CRT Side dei das dents dau ate 08100 
COSUR tra ao reines éensneet JL 156 
COR0: Scan ennemi eee 20 10e 
156 
GRAB socosoocososemoseessosuusscssscsesce 157 
Graphiques esse ososssseesessee 101 
Graphiques avancés ..s.sssosssssessssseee 127 


Haute résolution .....ssssssoosessesseses 106 
Hexadécimal (code) ...sssososoososoessess 56 
HEXS. see Ses ee oee se. cleln sie e ùi61:6.0 618 le70 0 0101010. 6 157 
HIMEM osseuses 157 
HIS dates oise nt AU 97 


— 192 - 


LE. 4: THEN ss ELSE: ss 00 essor so 0e 
ILLEGAL QUANTITY ERROR .....e ses se ss 
Indice esse EN CL AE 
INK 000000000000 0000000000 
INPUT”: Este sise sieste RE 
Insertion d'une ligne .....s..ssssesee 

Instruction ss... .. 
Instructions BASIC facultatives ..... ï 
Instructions de transfert ........ss.s.e.e 
INT es 00:50 0.6 ae des ne d'oise 0 es 008 Sc à 
Interface cassette .....se.sssossssosesee À 
Interface imprimante ......ssessssssesse 
JeUX sc sde se see EN 
KREYS es eee see sc se se 0 déso see s0:818 0.816 01000 : 
Langage esse nn 
LEFTS ..... . . ......... . ....... 
LEN +..cce nie dé 6e ec les die cute ie ee c'es se 0-00 ee 
LET se sise 66 80 0 2870 0 déesse esse és se 

LIST css d esse se 5 6 do 6e 586 êtessre 
Listage d'un programme ...... &niotsise cotes 
LLIST ss is e de srtre see 008 018 ee id eee es 
LN ...... .......... .... 
LOG Lo de socio dede gere ec ro de Se ee 60 
Logarithme ....... soso … 
LORES 255 s ass see sie cee e0 send does 


— 193 - 


43, 82, 
158 


3:17 
54 

108, 158 
26, 33, 
97, 158 
40 

26 

75 

79 

48, 93, 
158 

7, 178 
181 

42 

98, 159 
15, 53 
94, 159 
95, 118, 
159 

72, 78, 
24, 159 
30, 36, 
159 

36 

160, 181 
160 

93 

93 

103, 160 


Mantisse ........ 
Mémoire +... 


Microordinateur ........ os aeré 


Microprocesseur . 
MID$S ....... se see 


Mise en route ... 
MISMATCH ERROR .. 
Mode graphique .. 
Mode direct ..... 
Mode différé .... 


Modem .....eesoos.e 


ee 


CRE 


ee 


Modification d'une ligne ..... 
Mots réservés (ou clés) ...... 


MUSIC sous 


NEW soso 
NOT soso 


Note soso : 


Octet ss. 


ee .…. 


CRC 


...... . 
. CCR] 
CEE ee 


Opérateurs +essssss esse se ete se 045 00 «00e 
relationnels ........s.se.esesse 
adrithmétiques mes ssseieesteseneé este 


logiques ...... 
ON ... GOSUB .... 


0... 


ON ... GOTO soso sesososenosessessee 


OR 0.0 


Ordres de transfert inconditionnel 


CCC 


Ordres de transfert conditionnel ........ 


OVERFLOW ERROR .. 


PAPER soso 
Papier .......... 


56 

5 

i 

1 
95,118, 
161 

8 

59 

102, 103 
16 

16 

8 

41 

25, 59, 
145 

138, 161 


38, 161 


139 


13 
22 
72 
71 


161, 91, 
156 

162, 29, 
79, 156 
46, 73 


82 
55, 171 


162, 108 
108 


Partie entière .....sssssseseosessesesee 48 


PATRRN rien eine Toi ins 115, 162 

dE EE TE 128, 162 

Période + soso ee ss ds doses 138 

PI (signe mathématique Pi) .............. 26, 59, 
163 

PING non ue tea 51, 136, 
163 

PiRel- sil ue danses anis ee 106, 107 

PLAT nu dite ti anite nee RE 140, 141, 
163 

PO trie eme nc merhedue tite 108, 163 

LT EUR 119, 163 

ST 128, 163 

POP ee io ee ere ere date din e niece lier de 0:00 'e see ee 169 

POS: So eterra ote d'os scies e eee eitiee dos © 07e) 0 60 164 

PRINT sonia corieli ecrans 12, 16, 
24, 29, 
34, 164 

Prise Péritel ..scssssssssossssssssosssee 7 

Programme ....c.ssecosssessesesesesoeseees 18 

Programmation .......e.e ssssseesssoesee ee 26 

Puissance esse cssescseeee 21, 71 

PULL, sas sun ee sec su eee Ces sde se oférace 165 

RAM us oo see ant dore ro oo ierei see 6100 ie cle : 5 

Racine carrée .....ssesssesesssee Ssieess.: 4193 

READ: annee tes ue ets tanre le ec dieie shot 99, 165 

RELEASE ....sssssssosseossssessseses .. 165 

Remplacement d'une ligne ...............: 28 

RÉPRAL 45 UNTDL tone tee donusates 49, 83, 
165 

Remise à zéro des variables ............. 75 

ET TO A TEE 79, 165 

Reprendre la main ...........ssssseeesee 89 

RESET ..... nés ends eiee cie es 6 6616 01010 6.6 0 60.0 0510 89 

RESTORE ...soosseessousocesesceoroseussee 32 

Retour chariot .........s.ssssesesesessee 12 

RÉ NUAN cad ananas ones 12, 166 

RIGHTS Sosa contes aout NRA RTE 166, 194 

RND sales séries ne dote sas eds se ee 47, 166 

ROM ....... Sete nt en nées eee 18, 39, 
166 

RUN ...... AR TT 18, 39, 
166 


SOUND 


Sous-programme 
Soustraction 


SPC 


STR$ 


Suppression d'une ligne 
SYNTAX ERROR 


TAB 
Tableaux 


de variables entières 
de chaînes de caractères 
de variables réelles 


TAN 
Tangente 
TEXT 
Test 


TROFF 


UNDEF'D STATEMENT ERROR 
Unité centrale 


USR 


ee 


0 


0.000... 


Sortie cassette esse 
Sortie vidéo 


CCC 


0... 


168 


67 
68 
69 
93, 169 


102, 169 
43 

26 

169 

169 

169 


80 


170 


VAL ssces ce ce 6e 00e 0051066 o010 10 ee: 010 0.00 60100 
Valeur absolue .......s.ssoosoesoososseee 
Variables simples ......ses.sesesssesssse 
entléres: d'os ses die 08 à se 08e ve 810 218 010.810 00.6 
réelles.sinhsesssssoen ie tsseses as 
fndicees.-254 5e delle se cites en ses ce 0 0.000 


Volume sas sos dos ec de ets sors sé de se 


WAIT css 


ZAP .. 


......................... 


—197 - 


50, 170 


51, 170 


LA BIBLIOTHÈQUE 


EDIMICRO 





e Collection « Guides 

microordinateurs » 

de Merly GUIDE DE L'APPLE 
Tome 1 L'APPLE standard 
Tome 2 Les extensions 
Tome 3 Les applications 
Tome 4 Les langages 

Bayvejiel GUIDE DE L’ORIC 

Bieber, Perbost, Renucci GUIDE DU TO 7 


e Collection « Jeux » 


Chane-Hune, Darbois JEUX SUR ORIC 
Perbost, Renucci JEUX SUR TO 7 
e Collection « Logiciels » 
Bonnet, Dinh MULTIPLAN SUR APPLE 


Exercices de Gestion 


e Ouvrages de base 


Viguier Premiers pas en programmation 
sur ORIC 


| Les séminaires de formation FDS/Edimicro| 


e Pour utilisateurs non spécialistes 
VISICALC - MULTIPLAN - GESTION DE FICHIERS - 
BASES DE DONNEES - CHOIX D’UN MICROORDINA- 
TEUR - BUREAUTIQUE... 


e Pour programmeurs débutants 
PREMIERS PAS EN BASIC - FICHIERS EN BASIC... 


e Pour professionnels de l’informatique 
TÉLÉMATIQUE - UNIX - XENIX - MS-DOS - LANGAGE C... 


EDIMICRO 
121-127, avenue d’Italie, 75013 PARIS 


Imprimé en France. — JOUVE, 18, rue Saint-Denis, 75001 PARIS 
Dépôt légal 1'° édition : juin 1983 
N° 11958. Dépôt légal : Novembre 1983 








= GUIDE DE L'ORIC 


Philippe Bayveiiel 


« Débutants ou experts, amateurs de jeux ou professionnels de la 
gestion, ce livre vous passionnera. Laissez-vous conduire pas-à-pas, 
et vous constaterez à quel point il est facile d'utiliser et de programmer 
| :: - votre ORIC ». 

| Denis TAIEB 

Importateur de l'ORIC en France 


L'ORIC se place dans le peloton de tête des ordinateurs personnels 
de sa catégorie : dès son apparition, toute récente, le public lui a fait 
un excellent accueil. 


Ce guide s'adresse à tous les possesseurs et utilisateurs de l'ORIC, 
ainsi qu'à toutes les personnes qui envisagent d'acheter un ordi- 
nateur familial et professionnel. Chacun trouvera iciunbonexemple 
de ce que peut faire un petit ordinateur et apprendra à s'en servir 
même s'il n'a aucune connaissance en informatique. 


Le GUIDE DE L'ORIC adopte une démarche très progressive, illus- 
trée par de nombreux exemples : 


Chapitre 1 : présentation générale de l'ORIC. 

Chapitre 2 : initiation à la programmation: créez votre jeu en BASIC. 
Chapitre 3 : Le BASIC de l'ORIC. 

Chapitre 4 : possibilités graphiques de l'ORIC. 

Chapitre 5 : les sons et l'ORIC. 














PARLE